"use strict";
setTimeout(function() {"use strict";console.log(this)}, 1000);
setTimeout调用的'this'内部函数应该引用全局对象,但我也有“use strict”;在身体里。然而它记录了窗口而不是未定义,这正是我所期待的。这里发生了什么?
答案 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,尽管你没有写它。