window.setTimeout()和setTimeout()之间有什么区别?

问题描述 投票:15回答:5

我想知道它们之间的区别

window.setTimeout(myFancyFunciton, 1000); 

setTimeout(myFancyFunciton, 1000);

两者似乎完全一样。你什么时候应该使用其中一个?

javascript settimeout
5个回答
28
投票

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()。这是同一个对象的所有方法。


7
投票

假设我们正在谈论基于浏览器的JavaScript:没有区别。 setTimeout()简单地省略了暗示的window.。它们的效果完全相同。

它是编码风格和偏好的选择。

对于未在浏览器中运行的JavaScript,未定义window对象,因此window.setTimeout()将失败。然而,setTimeout()会奏效。


2
投票

来自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


0
投票

它完全一样。如果不指定窗口,则隐式窗口。查看可能的重复:

window


0
投票

我遇到了与此主题相关的问题。我试图让我的SPA的一些功能成为服务器端渲染过程的一部分。我使用Is there a need to prepend setTimeout and setInterval with window object?在UI上提供了一些延迟操作。当它在服务器端(NodeJS)上工作时,它将变为服务器端的延迟操作,与客户端无关。这是因为浏览器setTimeout(比如setTimeout)与NodeJS window.setTimeout不同。除了不同的运行时环境,禁止使用单个setTimeout进行客户端和服务器端渲染,setTimeoutBrowser NodeJs的实现是不同的,它们具有不同的返回值...现在我正在寻找一些解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.