Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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,这里的时间已经很晚了,所以我的功能可能不太好,但是我找到了这段代码,我似乎不明白为什么会这样使用它(注意:我理解它的作用,我不理解它背后的含义) 自动执行的匿名函数用于避免全局名称空间的污染,但此代码不需要引入除Narcissus之外的其他变量,因此它可以很容易地重写为Narcissus={…}。我能想到的一些可能的原因是代码或实现缺陷的未来证明。有什么我看不到的吗?你缺少的是javascript是一种区分大小写的语言,所以 Narcissus != narcissus; 他通过省略var关

这里的时间已经很晚了,所以我的功能可能不太好,但是我找到了这段代码,我似乎不明白为什么会这样使用它(注意:我理解它的作用,我不理解它背后的含义)


自动执行的匿名函数用于避免全局名称空间的污染,但此代码不需要引入除
Narcissus
之外的其他变量,因此它可以很容易地重写为
Narcissus={…}。我能想到的一些可能的原因是代码或实现缺陷的未来证明。有什么我看不到的吗?

你缺少的是javascript是一种区分大小写的语言,所以

Narcissus != narcissus; 
他通过省略
var
关键字将
Narcissus
添加到全局范围,或者Narcissus已在全局范围内可用,或者
Narcissus
已在调用此函数的范围内定义

然后将其定义为匿名函数中的对象
narcissus

我无法告诉您他为什么要这样做,但看起来他可能已经在一个作用域中,
this
引用了一个对象,他想将键
hostGlobal
设置为全局对象,而不是当前作用域的对象

这就是为什么他将其作为匿名函数运行,因为它们是在全局范围而不是函数范围内执行的。所以在他的代码中,hostGlobal:this
指的是全局对象

当然,他可以只使用
hostGlobal:window
,除非此代码也在非浏览器环境中运行,例如node.js,其中全局对象是
global
而不是
window
。因此,他这样做可能是作为一种非常不直观的实现方法

hostGlobal: ( global === undefined )? window : global  

希望这有助于

从可维护性的角度来看,它允许作者以后在闭包范围中添加代码,而不会在创建
narcissus
和分配
narcissus
之间泄露。虽然在这种情况下没有任何代码,所以除了上面提到的
这个
东西之外,我看不到任何好处。

同意你的观点。除了说这是一种不同的风格,或者可能原始人不知道你建议的其他方式。唯一有效的原因可能是
这个在全局范围内的
在非浏览器环境中无效。当as
这个
在一个自执行函数中总是全局主机时,为什么在数字后面和结束括号之前总是有一个逗号?@Jose,也许他们特别想扼杀IE:p
他通过省略var关键字将Narcissus添加到全局范围,或者Narcissus已经在全局范围中可用,或者Narcissus已经在调用此函数的范围内定义了它。
我知道所有这些内容,感谢您将其清除。第二部分很有意思,我来研究一下it@Gabi如果你想让我把答案的任何部分说得更清楚一点,请问我。
hostGlobal: ( global === undefined )? window : global