繁体   English   中英

使用“警报”和“确认”作为变量名

[英]Using “alert” and “confirm” as variable names

根据该MDN文章以及我可以找到的任何其他来源,“ alert”和“ confirm”不是JavaScript中的保留字。 为什么未在此处列出它们,并且可以安全地用作函数体内的变量名称?

只要在var声明它们,就可以安全地在函数体内使用它们。 如果不使用var声明它们,则将在全局(窗口)范围内覆盖它们,这可能会导致很多问题。

未列出它们,因为它们不是保留字。

alertconfirmwindow对象上的功能,该对象是浏览器中的全局作用域。 因为它是全局的,所以可以将其属性引用为裸词。

//Equivalent
window.alert('test');
alert('test');

您可以在函数内部安全地使用它们。 这样做将隐藏裸机,但是您仍然可以调用window.alert()来访问它们。

是的,它们不是保留字。

在ECMAScript 5中, 保留字是:

  • 关键字breakdoinstanceoftypeofcaseelsenewvarcatchfinallyreturnvoidcontinueforswitchwhiledebuggerfunctionthiswithdefaultifthrowdeletein try
  • 将来的保留字classenumextendssuperconstexportimport 并且,在严格模式下, implementslet privatepublicyieldinterfacepackageprotectedstatic
  • 空字面量null
  • 布尔文字truefalse

由于alertconfirm是标识符名称,而不是保留字,因此它们是标识符。 因此,它们可以安全地用作变量名。

 var alert = 1, confirm = 2; document.body.innerHTML = alert + confirm; // 3 

您可以覆盖这些功能,没有什么可以阻止您。

如果您有一个自定义对象或函数:

var obj = { alert: 1, confirm: 2};
function func(){
    var alert = 1;
    var prompt = 2;
}

这不是问题。

但是,如果您覆盖了实际alertconfirm了窗口对象上的功能,则如果包含依赖于该功能的库,则可能会遇到麻烦。

为了禁用烦人的alert()框,这可能很有用。

它们不是保留字,因为它们是“全局”(“窗口”的属性)功能。 给它们分配值将导致它们失去在相同范围内的功能,例如:

alert = "sdfsdf";
...
alert("something");

将导致错误,例如“ TypeError:警报不是函数”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM