javascript中的关键字THIS作为全局命名空间
key word THIS in javascript as global namespace
我正在从这里读取代码样本
您会发现它是javascript中的IIFE。在阅读了一些文档后,我现在很清楚它是什么,以及它是如何以一种简单的方式工作的。
但在这个脚本的最后,它通过了"this['routingConfig']"
(function(exports){
// Other codes
exports.userRoles = buildRoles(config.roles);
// Other codes and definition of buildRoles
})(typeof exports === 'undefined' ? this['routingConfig'] = {} : exports);
然后,我们似乎可以在其他脚本文件中直接调用它,如下所示:
var access = routingConfig.userRoles;
的确切用途是什么
(typeof exports === 'undefined' ? this['routingConfig'] = {} : exports);
"this"关键字似乎用作全局命名空间,添加"routingConfig"作为键值对。
这行代码:
(typeof exports === 'undefined' ? this['routingConfig'] = {} : exports);
最终将决定传递什么作为IIFE的第一个论点。
- 如果在当前作用域中定义了
exports
,则它将通过exports
- 如果未定义
exports
,则它将把this['routingConfig']
初始化为一个空对象,并将该空对象作为第一个参数传递
如果routingConfig.userRoles
在代码的其他地方是可访问的,那么这是因为this['routingConfig']
正在设置某个对象的属性(无论this
在该代码中指向什么),而该对象显然在代码中的其他地方也是可访问的。
this
可能指向global
对象,但我们必须查看代码的整个上下文才能确定。如果它确实指向全局对象,这可以解释为什么它可以从代码中的其他位置访问。
就我个人而言,我从不编写假设this
是全局对象的代码。如果我想引用全局对象,我直接引用它。然后,任何浏览您的代码的人都会确切地知道代码的意图,而不必怀疑this
设置为什么。
我对this
的使用几乎完全是方法调用中的主机对象,或者是在为DOM事件调用回调函数(如.addEventListener()
)时通过文档专门设置的对象。这使得从本地代码上下文中可以更清楚地了解this
的设置。
相关文章:
- 用自定义javascript全局命名空间替换窗口
- 从html文件中的脚本标记调用非全局命名空间函数
- 正在测量全局命名空间的污染
- 带有 jquery、全局命名空间的变量的 $ 前缀
- jQuery 函数的全局命名空间问题
- 使用require.js后,如何通过简单的脚本引用访问jquery全局命名空间
- 如何在不污染全局命名空间的情况下共享常用的jquery函数
- Firefox Bookmarklet:向全局命名空间公开函数
- 使用RequireJS定义全局命名空间
- 如何在不让web组件的原型进入全局命名空间的情况下维护它们之间的依赖关系
- javascript中的关键字THIS作为全局命名空间
- 检查全局命名空间中是否存在没有备用名称的变量
- javascript 全局命名空间是否在每次完整回发时被清除
- setTimeout 而不会污染全局命名空间
- 如何在Javascript中跟踪/保留全局命名空间
- 为什么Google闭包编译器在原始命名空间为空的情况下向全局命名空间添加变量
- 全局命名空间中的JavaScript库函数-缺点
- 什么'这是向全局命名空间公开requireJS模块的正确方法
- 如何在javascript中定义全局命名空间
- 全局命名空间中事件的最佳实践