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