我想知道它们之间的区别
window.setTimeout(myFancyFunciton, 1000);
和
setTimeout(myFancyFunciton, 1000);
两者似乎完全一样。你什么时候应该使用其中一个?
JavaScript在由全局对象定义的环境中运行。可以在不明确引用对象的情况下调用全局对象的方法(即,没有obj.function()
表示法)。
在浏览器中运行JavaScript时,全局对象由文档对象模型(DOM)提供。 DOM的全局对象有一个方法setTimeout()
。这就是为什么你可以打电话给setTimeout()
。
DOM指定全局对象具有名为window
的属性,该属性是对全局对象的引用。这就是为什么你可以调用window.setTimeout()
和(通过传递性)window.window.setTimeout()
,window.window.window.setTimeout()
和(你猜对了)window.window.window.window.window.window.window.window.window.setTimeout()
。这是同一个对象的所有方法。
假设我们正在谈论基于浏览器的JavaScript:没有区别。 setTimeout()
简单地省略了暗示的window.
。它们的效果完全相同。
它是编码风格和偏好的选择。
对于未在浏览器中运行的JavaScript,未定义window
对象,因此window.setTimeout()
将失败。然而,setTimeout()
会奏效。
来自https://developer.mozilla.org/en-US/docs/Web/API/Window
window对象表示窗口本身。
因此,您调用的所有变量和函数都包含在对象窗口中。但是,每次调用函数或变量时都可以省略对象引用。
为什么这个?考虑一个包含2个或更多帧的页面。每一帧都有自己的window
。您可以从另一个框架访问框架内的变量,只需访问目标的window
对象。这对于声明为全局的每个变量或函数都有效...它对于本机函数也是有效的,比如setTimeout
。
那么为什么有时我们需要写明确的qazxsw poi?
简单地说,如果您在作用域内并且使用本机函数的相同名称,则可以选择要使用的函数。
例如:
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
我遇到了与此主题相关的问题。我试图让我的SPA的一些功能成为服务器端渲染过程的一部分。我使用Is there a need to prepend setTimeout and setInterval with window object?在UI上提供了一些延迟操作。当它在服务器端(NodeJS)上工作时,它将变为服务器端的延迟操作,与客户端无关。这是因为浏览器setTimeout
(比如setTimeout
)与NodeJS window.setTimeout
不同。除了不同的运行时环境,禁止使用单个setTimeout
进行客户端和服务器端渲染,setTimeout
和Browser NodeJs的实现是不同的,它们具有不同的返回值...现在我正在寻找一些解决方法。