我想知道以下两种说法的区别是什么:
window.setTimeout(myFancyFunciton, 1000);
并且
setTimeout(myFancyFunciton, 1000);
两者看起来做的事情完全相同,那么什么时候应该使用其中之一呢?
window.setTimeout(myFancyFunciton, 1000);
并且
setTimeout(myFancyFunciton, 1000);
两者看起来做的事情完全相同,那么什么时候应该使用其中之一呢?
obj.function()
的表示方法)。setTimeout()
的方法。这就是为什么您可以调用setTimeout()
的原因。window
的属性,该属性是对全局对象的引用。这就是为什么您可以调用window.setTimeout()
以及(通过传递性)window.window.setTimeout()
、window.window.window.setTimeout()
,以及(您猜对了)window.window.window.window.window.window.window.window.window.setTimeout()
。它们都是同一个对象的同一个方法。setTimeout()
只是省略了 window.
,这是隐含的。它们产生的效果完全相同。window
对象未定义,因此 window.setTimeout()
将失败。然而,setTimeout()
将会起作用。setTimeout()
不是 ECMAScript 规范的一部分,因此它能否正常工作取决于具体的全局对象。 - Oswald来自https://developer.mozilla.org/zh-CN/docs/Web/API/Window
window对象表示窗口本身。
因此,你调用的所有变量和函数都封装在window对象内部。但是每次调用函数或变量时,您可以省略对象引用。
为什么这样?
想象一下有2个或更多帧的页面。每个框架都有自己的window
。您可以通过访问目标window
对象从一个框架中访问另一个框架中的变量。
这对于声明为全局的每个变量或函数都有效... 对于原生函数也有效,例如setTimeout
。
那么为什么有时需要显式编写window.setTimeout
?
简单地说,如果您在作用域内使用与本机函数相同的名称,则可以选择使用哪个函数。
例如:
function myF() {
function setTimeout(callback,seconds) {
// call the native setTimeout function
return window.setTimeout(callback,seconds*1000);
}
// call your own setTimeout function (with seconds instead of milliseconds)
setTimeout(function() {console.log("hi"); },3);
}
myF();
window
仅存在于浏览器环境中。在Node.js
中,全局对象是global
,而window
未定义。