我最近读了很多Javascript,我注意到整个文件在要导入的.js文件中是像下面这样包装的。
(function() {
...
code
...
})();
为什么要这样做而不是简单的构造函数集呢?
我最近读了很多Javascript,我注意到整个文件在要导入的.js文件中是像下面这样包装的。
(function() {
...
code
...
})();
为什么要这样做而不是简单的构造函数集呢?
当前回答
为了避免与同一窗口中的其他方法/库冲突, 避免全球范围,让它成为局部范围, 为了加快调试(本地范围), JavaScript只有函数作用域,所以它也有助于代码的编译。
其他回答
除了保持变量在本地之外,一个非常方便的用法是在使用全局变量编写库时,可以给它一个更短的变量名,以便在库中使用。它经常用于编写jQuery插件,因为jQuery允许您使用jQuery. noconflict()禁用指向jQuery的$变量。如果它被禁用,你的代码仍然可以使用$,如果你只是这样做:
(function($) { ...code...})(jQuery);
为了避免与同一窗口中的其他方法/库冲突, 避免全球范围,让它成为局部范围, 为了加快调试(本地范围), JavaScript只有函数作用域,所以它也有助于代码的编译。
你也可以在更大的表达式中使用函数闭包作为数据,就像在这个方法中确定浏览器对某些html5对象的支持一样。
navigator.html5={
canvas: (function(){
var dc= document.createElement('canvas');
if(!dc.getContext) return 0;
var c= dc.getContext('2d');
return typeof c.fillText== 'function'? 2: 1;
})(),
localStorage: (function(){
return !!window.localStorage;
})(),
webworkers: (function(){
return !!window.Worker;
})(),
offline: (function(){
return !!window.applicationCache;
})()
}
我们还应该在作用域函数中使用“use strict”,以确保代码应该在“严格模式”下执行。示例代码如下所示
(function() {
'use strict';
//Your code from here
})();
提供一个接受的答案的例子,从https://requirejs.org/docs/whyamd.html:
(function () {
var $ = this.jQuery;
this.myExample = function () {};
}());
代码演示了我们可以:
在作用域中使用全局变量 导出函数、变量等。通过绑定this,也就是浏览器的窗口对象。