为什么窗口仍然在此严格模式代码中定义?

时间:2014-02-22 16:29:36

标签: javascript

"use strict";

setTimeout(function() {"use strict";console.log(this)}, 1000);

setTimeout调用的'this'内部函数应该引用全局对象,但我也有“use strict”;在身体里。然而它记录了窗口而不是未定义,这正是我所期待的。这里发生了什么?

3 个答案:

答案 0 :(得分:7)

setTimeout is defined调用它在window

的上下文中传递的函数
  

实现运行算法的方法的对象(Window或WorkerGlobalScope对象)作为方法上下文,

类似于调用yourfunction.apply(window)而不是yourfunction()

答案 1 :(得分:3)

现在距离问题差不多4年了。

MDN setTimeout page中有一条注释,正是解决了这个问题。

  

this回调的默认setTimeout still 为   window对象,即使在严格模式下也不是undefined

这也适用于setInterval,即使没有提及there

答案 2 :(得分:1)

因为这实际上是:

  window.setTimeout(function() {"use strict";console.log(this)}, 1000);

你实际上用window-object调用setTimeout,尽管你没有写它。