window.setTimeout()和setTimeout()有什么区别

What the difference between window.setTimeout() and setTimeout()?

本文关键字:setTimeout 区别 什么 window      更新时间:2024-03-26

我想知道之间的区别

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

窗口对象表示窗口本身。

因此,您调用的所有变量和函数都包含在对象窗口中。但是,每次调用函数或变量时都可以省略对象引用。

为什么这样?想象一个有2个或更多框架的页面。每个帧都有自己的CCD_ 14。只需访问目标的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

这是完全一样的。窗口是隐含的,如果你没有指定它。检查可能的重复:

是否需要用窗口对象预先设置setTimeout和setInterval?

我遇到了一个与此主题相关的问题。我试图使我的SPA的一些功能成为服务器端渲染过程的一部分。我使用setTimeout在UI上提供了一些延迟操作。当它在服务器端(NodeJS)工作时,它会在服务器端变成与客户端无关的延迟操作。这是因为浏览器setTimeout(比如window.setTimeout)与NodeJS setTimeout不同。除了不同的运行时环境禁止使用单个setTimeout进行客户端和服务器端渲染外,Browser和NodeJs的setTimeout的实现也不同,它们有不同的返回值。。。现在我正在寻找一些变通办法。