What is the difference between globally declaring a function and using window.myfunc = myfunc
What is the difference between the following 2 ex开发者_JS百科amples of code:
(function(){
var myFunc = (function(){
//do something
})();
window.myFunc = myFunc;
})();
and
var myFunc = (function(){
//do something
})();
The two ways are really similar, but there is a small difference on how the myFunc
global variable is created.
In the second way, using the var
statement, will create the myFunc
variable as a non-deleteable property of the global object, the var statement explicitly sets the internal {DontDelete}
attribute , e.g.:
var myFunc = (function(){
//do something
})();
delete window.myFunc; // false
While the first one can be deleted:
(function(){
var myFunc = (function(){
//do something
})();
window.myFunc = myFunc;
})();
//...
delete window.myFunc; // true
If you try the above in Firebug, both can be deleted, thats because Firebug uses code evaluation (eval
) in the console.
You can check the above example here.
Recommended article:
- Understanding delete
Semantically nothing. However, the first example you can have "private" functions that can make your code more readable.
Take this example:
(function(){
var helperFunc = function()
{
//do something else
}
var myFunc = function(){
//do something
helperFunc();
}
window.myFunc = myFunc;
})();
Cleaner code results in the hands of a good developer
精彩评论