Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';将全局对象作为参数传递给自执行函数的意义是什么?_Javascript - Fatal编程技术网

Javascript 什么';将全局对象作为参数传递给自执行函数的意义是什么?

Javascript 什么';将全局对象作为参数传递给自执行函数的意义是什么?,javascript,Javascript,我经常在Javascript库中看到这种模式: (function (window, document, $, undefined) { window.foo = 'bar'; })(window, document, jQuery); 在本例中,传递window、document和jQuery有什么意义,因为它们是全局属性,可以直接访问,如下所示: (函数(){ window.foo='bar'; })(); console.log(foo)一个好处是,它允许库的缩小版本替换参数名

我经常在Javascript库中看到这种模式:

(function (window, document, $, undefined) {
    window.foo = 'bar';
})(window, document, jQuery);
在本例中,传递
window
document
jQuery
有什么意义,因为它们是全局属性,可以直接访问,如下所示:

(函数(){
window.foo='bar';
})();

console.log(foo)一个好处是,它允许库的缩小版本替换参数名。例如:

(function (window) {
    window.foo = 'bar';
})(window);
可以缩小到

(function(w){w.foo='bar'})(window);
(function(){window.foo='bar'})();
鉴于

(function () {
    window.foo = 'bar';
})();
只能缩小到

(function(w){w.foo='bar'})(window);
(function(){window.foo='bar'})();
这并不是一个很大的进步。无法重命名全局对象,但可以重命名参数名称

undefined
用作未传递给函数的参数可确保函数中对
undefined
的引用实际上是
undefined
,而不是一段疯狂的代码分配给名为
undefined
的变量的其他值,例如:

(()=>{
//可能存在的荒谬代码:
常量未定义='foo';
//库代码:
//不起作用:
(() => {
让某人说出自己的名字;
//我们希望someVarName未定义,因为someVarName尚未分配给,但:
log(someVarName==未定义);
})();
})();