Undersore 的 _.now 是如何工作的?

How does Undersore's _.now work?

看起来不像JavaScript写的。

如果你在控制台输入_now,你只会得到

function now() { [native code] }

通常只有当您尝试查看一些内部工作方式对浏览器不可见的内置方法时,您才会明白这一点。

setTimeout
=>function setTimeout() { [native code] }

_.now 是否使用 JavaScript 引擎的 "native code" 做了什么?

默认情况下 _.now is just Date.now,除非在不支持它的环境中。不支持 Date.now 的地方 _.now 将使用此实现(同样适用于 lodash)

_.now = function() {
   return (new Date()).getTime()
};

由于您的浏览器支持 Date.now_.now 只是本机实现的代理


注意:您还可以通过使用 Function.prototype.bind

调用使您的任何函数在控制台中显示为本机函数
function foo() {console.log('bar');}
var bar = foo.bind(null);

console.log(bar);
// => function () { [native code] }

它returns 当前时间的整数时间戳。用于实现 timing/animation 功能。

_.now(); => 1392066795351

看看下划线源代码:

_.now = Date.now || function() {
  return new Date().getTime();
};

这意味着它会使用Date.now()如果它存在,这是一个内部函数。否则它将使用所有 JavaScript 引擎都支持的 new Date().getTime()