1

有什么区别

function doStuff(){
    //do lots of fun stuff
}

window.doStuff = function(){
    //do lots of fun stuff
}

如果有的话?

4

4 回答 4

4

第一个将在当前范围上下文中创建一个 doStuff 函数属性。如果那是 window (或未定义范围),那么结果将与browser context 中的第二个相同。但是,如果当前范围例如在另一个函数中,则只会创建一个本地可用的函数,并且效果将与底部不同。

于 2014-01-09T06:28:55.373 回答
1

如果您在全局范围内声明函数,则没有太大区别。当您声明函数的代码范围不是全局的时,就会出现差异。例如,在另一个函数内部:

function doGlobalStuff()
{
    function doStuff(){
    // do lots of fun stuff
    }
}

如果执行 doGlobalStuff() 函数,窗口对象将包含 doGlobalStuff() 方法,但其中没有 doStuff() 方法。但是,此函数将在 window 对象中创建方法 doStuff():

function doGlobalStuff()
{
    window.doStuff = function(){
    // do lots of fun stuff
    }
}

搜索变量和函数范围以获取更多信息,例如: JavaScript 中变量的范围是什么?

于 2014-01-09T06:38:14.830 回答
0

只要第一个在全局范围内声明,这两者之间就没有区别。

于 2014-01-09T06:31:09.553 回答
0

第一个将在window不可用的浏览器上下文中工作。它还有一个名称(不管它分配给什么变量或方法键),这对于堆栈跟踪和递归等非常有用。

第二个在 node.js 中不起作用(尽管global会)。它没有自己的名称,这使得递归变得困难,如下例所示:

window.doStuff = function( i ){
    if( --i ){
        return window.doStuff();
    }

    return i;
}

如果 window.doStuff 被分配了别的东西,如下...</p>

window.doStuff = 'erg';

…然后上面的函数就中断了,因为它是匿名的并且不能引用自己——它基本上已经丢失了。

当然,没有什么能阻止你同时做这两件事:

window.doStuff = function doStuff(){
    //do lots of fun stuff
}
于 2014-01-09T06:35:31.320 回答