以下2个代码示例之间有什么区别:
(function(){
var myFunc = (function(){
//do something
})();
window.myFunc = myFunc;
})();
和
var myFunc = (function(){
//do something
})();
答案 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;
})();
清洁代码由优秀的开发人员负责