javascript模块模式中未定义变量的意义何在
What is the point of undefined variable in javascript module pattern
我遇到了下面的javascript模块模式,并且非常喜欢它,但是,为什么在参数中使用undefined
?
(function(window, document, undefined){
'use strict';
var MyWidget = function(){
if (!(this instanceof MyWidget)) {
var test = new MyWidget();
return test.init.call(test, Array.prototype.slice.call(arguments));
}
var firstPrivateVar = 'aa',
secondPrivateVar = 'bb';
this.init = function(options){
console.log('MyWidget.init', options);
return true;
};
this.setStuff = function(){
};
};
window.MyWidget = MyWidget;
})(window, document);
在ECMAScript 3中,开发人员有权使用未定义的关键字作为变量,即它是可变的。所以如果我要写
undefined = true;
undefined的值将为true,它将失去其真正的含义。在上面提到的场景中,我们传递的是窗口对象、文档对象,并且没有第三个参数。这意味着在function(window, document, undefined)
中,未定义的变量实际上是未定义的,因为我们没有向它传递任何参数
根据ECMAScript5,这个未定义的不再可变
undefined
在某些浏览器中可以被覆盖。这通过将undefined
重新定义为不存在的参数的值来修复作用域中的问题。
相关文章:
- 正在更改node.js模块变量
- AngularJS在不使用变量的情况下将服务注入模块中,这样就可以缩小它
- JavaScript:访问继承子模块中的“封闭”变量
- 将 NodeJS 模块范围变量作为对象访问
- 从导出的模块返回变量,并在另一个文件(NodeJS)中使用它
- 带有全局变量、咖啡脚本和回调的模块 CSV
- 将变量传递给 Javascript 模块化模式方法
- 使用模块模式时访问父作用域中的变量
- Node.js-模块导出静态变量
- 单元测试节点模块与mocha,模块变量行为怪异
- 如何通过名称(从模块本身)访问ES6模块变量
- 如何在模块之间更新此变量的值
- 传递变量:使用模块的最佳实践
- 如何将变量传递到NodeJS模块中
- 如何将全局变量放在Globals.js模块中,并在其他模块中访问它们
- 如何在 Node 中访问模块全局变量.js例如浏览器中的 window.variable
- 请求节点模块变量范围
- TypeScript:从模块创建全局变量
- 访问 JavaScript 模块中的模块变量
- 可以在模块中运行.导出访问模块中的全局变量