全局声明函数和使用window.myfunc = myfunc之间有什么区别

时间:2010-03-10 21:47:01

标签: javascript unobtrusive-javascript

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

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

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

2 个答案:

答案 0 :(得分: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中尝试上述操作,则可以删除这两个,因为Firebug在控制台中使用代码评估(eval)。

您可以查看上面的示例here

推荐文章:

答案 1 :(得分:0)

语义上没什么。但是,第一个示例是“私有”函数可以使代码更具可读性。

举个例子:

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

清洁代码由优秀的开发人员负责