Javascript 试图理解最后一行代码
我有一段代码:Javascript 试图理解最后一行代码,javascript,Javascript,我有一段代码: (function(){ var d = { sayHello: function(a){ document.writeln("Hello "+a) } } this.d = d; })(); 我知道这是一种生活,但最后一行让我困惑。对象d是否超出范围?它就像一个可以访问的API一样使用,对吗 this.d=d意味着d现在是作用域上的一个变量,可以使用了吗 有没有其他方法可以实现这一点?因为IIFE
(function(){
var d = {
sayHello: function(a){
document.writeln("Hello "+a)
}
}
this.d = d;
})();
我知道这是一种生活,但最后一行让我困惑。对象d
是否超出范围?它就像一个可以访问的API一样使用,对吗
this.d=d
意味着d
现在是作用域上的一个变量,可以使用了吗
有没有其他方法可以实现这一点?因为IIFE是通过
()
直接调用的,没有“上下文”,所以此
将默认(在非ES5-STRICT模式下)为窗口
因此,该线相当于:
window.d = d;
是的,因此将d
暴露到全局名称空间中
您不应该使用此方法,因为它与ES5“use strict”
不兼容,后者在没有显式上下文的情况下设置this=null
。相反,我会推荐这样的产品:
var MYNAMESPACE = MYNAMESPACE || {};
MYNAMESPACE.SUBPACKAGE = (function() {
...
return d;
})();
由于IIFE是通过
()
直接调用的,因此没有“上下文”,因此此
将默认(在非ES5-STRICT模式下)为窗口
因此,该线相当于:
window.d = d;
是的,因此将d
暴露到全局名称空间中
您不应该使用此方法,因为它与ES5“use strict”
不兼容,后者在没有显式上下文的情况下设置this=null
。相反,我会推荐这样的产品:
var MYNAMESPACE = MYNAMESPACE || {};
MYNAMESPACE.SUBPACKAGE = (function() {
...
return d;
})();
这是您的全部代码吗?是的,我开始编写api,首先想了解如何编写。如果
此
指向窗口(就是这种情况),那么是的,您的变量现在可以全局使用这是您的全部代码吗?是的,我开始编写api,首先要了解如何操作。如果此
指向窗口
(就是这种情况),那么是的,您的变量现在是全局可用的,我应该使用什么?我的意思是封装代码,然后公开对象作为API使用。谢谢,我应该用什么?我的意思是封装代码,然后公开对象作为API使用。谢谢