Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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,我有一段代码: (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使用。谢谢