1

以下2个代码示例有什么区别:

(function(){
    var myFunc = (function(){
        //do something
    })();
    window.myFunc = myFunc;
})();

var myFunc = (function(){
    //do something
})();
4

2 回答 2

3

这两种方式非常相似,但在myFunc创建全局变量的方式上存在细微差别。

第二种方式,使用var语句,将创建myFunc变量作为全局对象的不可删除属性,var语句显式设置内部{DontDelete}属性,例如:

var myFunc = (function(){
    //do something
})();

delete window.myFunc; // false

虽然可以删除第一个:

(function(){
    var myFunc = (function(){
        //do something
    })();
    window.myFunc = myFunc;
})();

//...
delete window.myFunc; // true

如果您在 Firebug 中尝试上述操作,都可以删除,那是因为 Firebugeval在控制台中使用了代码评估 ( )。

您可以在此处查看上述示例。

推荐文章:

于 2010-03-10T21:57:05.587 回答
0

语义上没有。但是,第一个示例可以具有“私有”功能,可以使您的代码更具可读性。

举个例子:

(function(){
    var helperFunc = function()
    {
        //do something else
    }
    var myFunc = function(){
        //do something
        helperFunc();
    }
    window.myFunc = myFunc;
})();

更简洁的代码交由优秀的开发人员使用

于 2010-03-10T21:59:45.323 回答