为什么要重用`undefined`?

Bri*_*ian 7 javascript jquery

John Resig关于他如何构建jQuery 1.4 的幻灯片中,他提到了一个点,他undefined在jQuery闭包中添加了一个变量,因为"我们可以重用(变量)".

undefined 不是一个普通的变量:

> var undefined = 4
  undefined
> undefined
  undefined
Run Code Online (Sandbox Code Playgroud)

因此,我们知道undefined不是变量.那么为什么undefined在jQuery源代码中会重新定义?

幻灯片31

Roc*_*mat 10

因为在某些JavaScript引擎中,可以设置undefined为一个值.这是为了确保undefined真的undefined.

  • 我建议不要那样保护.这只是愚蠢的.如果人们愚蠢到重新定义"未定义",他们应该得到什么. (4认同)
  • 无所谓.如果有人重新定义了"原型"怎么办?你将以同样的方式注定,并且你无法防范一切.只是防止未定义的意志最多让你感觉更安全. (3认同)
  • @ user1737909:足够公平,但如果它是恶意脚本怎么办:O (2认同)
  • @ user1737909虽然我同意,但我认为你不能构建一个javascript库,也不会添加一些故障保险箱来防止意外错误,不管它们多么愚蠢. (2认同)

Bol*_*wyn 5

除了+ Rocket Hazmat的答案之外,当您的代码undefined频繁使用时,您可以在压缩后稍微减小文件大小.那是因为局部变量undefined的名称可能被压缩器损坏,而全局变量undefined可能不会:

foo === undefined;
//      ^----- don't touch this, put "undefined" in the compressed result

(function (undefined) {
    foo === undefined;
})();
// may however be mangled to
(function(u){foo===u})();
Run Code Online (Sandbox Code Playgroud)