是否有可能覆盖javascript中的undefined?

sur*_*wat 7 javascript

喜欢

function myFunction(){
    var undefined = "abc";
}
Run Code Online (Sandbox Code Playgroud)

如果它可能那么如何限制不允许?

gdo*_*ica 7

有些浏览器允许它,限制它的最好方法是避免它.

但是......有些人正在使用这种技术来保留未定义的:

(function(undefined){

})()
Run Code Online (Sandbox Code Playgroud)

它们获取一个被调用的变量undefined但不传递给出undefinedundefined值的值.

来自jQuery的源代码:

(function( window, undefined ) {
    ...
    ...
})(window);
Run Code Online (Sandbox Code Playgroud)


Ber*_*rgi 7

是否有可能覆盖javascript中的undefined?

如果"未定义"是指全局undefined变量,则表示没有.从EcmaScript 5开始,它被指定为不可写.但是,旧版浏览器不遵守该规范,因此在旧版引擎中可以覆盖.你不能真正阻止它,但总是重置它undefined = void 0;.如果您仍然担心并想知道如何保护自己的脚本,那么请检查一下JavaScript中的危险性,确实假设未定义未被覆盖?.

喜欢 function myFunction(){ var undefined = "abc"; }

那是另一回事.您始终可以使用名称声明局部变量undefined(遮蔽全局变量)并为其指定任意值.

  • +1.我认为混淆来自于认为`undefined`是关键字而不是全局对象的属性.一些语法突出显示器突出显示它好像是一个关键字,可能增加了混乱(甚至SO这样做). (2认同)