【问题标题】:Is there a need to prepend setTimeout and setInterval with window object?是否需要在窗口对象前面加上 setTimeout 和 setInterval?
【发布时间】:2013-11-21 03:00:27
【问题描述】:

在 Mozilla 文档中,有一些在计时器函数前面写有window. 的示例,还有一些没有:

function delayedAlert() {
  timeoutID = window.setTimeout(slowAlert, 2000);
}...

setTimeout(myArray.myMethod, 1000);...

window.setInterval = function (vCallback, nDelay...

到目前为止,我一直在编写没有window. 的代码,没有任何问题。我想知道是否有必要的情况。

【问题讨论】:

  • 不,因为window 是全局命名空间。
  • 哦,我看到你已经删除了你的另一个问题,无论哪种方式,还有另一种方法可以内联分配和执行函数,但它也相当难看:(o.func = function(){}).call(o); (fiddle)

标签: javascript window settimeout setinterval


【解决方案1】:

如果..

  1. 范围内没有具有给定名称(xwindow)的其他标识符,并且;
  2. 没有解析给定名称(xwindow)的 with 绑定,并且;
  3. 给定名称 (x) 是 全局范围 (window) 中的一个属性

.. 那么window.xx 是等价的。

对于标准强制全局属性/功能(必须存在于健全的网络浏览器环境的全局范围内),我不包括window。我也注意不要掩盖这些名字。

【讨论】:

  • @QuestionOverflow 但是,请注意,window.yy 在没有 no 此类绑定时的行为会有所不同:未绑定的标识符 y 可以抛出ReferenceError,而一个不存在的属性计算为undefined
  • 如在后者会触发错误?好了,我懂了。谢谢:)
【解决方案2】:

不,您不必添加它,“窗口”部分是隐含的,因为根对象是window。但是,人们继续添加它,因为它表示内置函数,而不是用户定义的函数。

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多