根据this MDN article以及我可以找到的任何其他来源,“alert”和“confirm”不是JavaScript中的保留字。为什么它们没有列在这里,它们是否可以安全地用作函数体内的变量名?
答案 0 :(得分:5)
只要用var
声明它们,就可以在函数体内使用它们。如果你没有用var声明它们,那么你会在全局(窗口)范围内覆盖它们,这可能会导致很多问题。
答案 1 :(得分:3)
它们未列出,因为它们不是保留字。
alert
和confirm
是window
对象上的函数,它是浏览器中的全局作用域。因为它是全局的,所以您可以将其属性称为裸字。
//Equivalent
window.alert('test');
alert('test');
您可以在函数内安全地使用它们。这样做会隐藏裸露使用,但您仍然可以致电window.alert()
来访问它们。
答案 2 :(得分:1)
是的,它们不是保留字。
在ECMAScript 5中,reserved words是:
break
,do
,instanceof
,typeof
,case
,else
,new
,var
,catch
,finally
,return
,void
,continue
,for
,switch
,{ {1}},while
,debugger
,function
,this
,with
,default
,if
,{{1 },throw
,delete
。in
,try
,class
,enum
,extends
,super
,const
。并且,在严格模式下,export
,import
,implements
,let
,private
,public
,yield
,{{ 1}},interface
。package
protected
,static
。由于null
和true
是标识符名称而不是保留字,因此它们是标识符。因此,它们可以安全地用作变量名。
false
答案 3 :(得分:0)
你可以覆盖这些功能,没有什么能阻止你。
如果您有自定义对象或功能:
var obj = { alert: 1, confirm: 2};
function func(){
var alert = 1;
var prompt = 2;
}
这不是问题。
但是,如果覆盖窗口对象上的实际alert
或confirm
函数,如果包含依赖于该函数的库,则可能会遇到麻烦。
为了禁用恼人的alert()
框,这可能很有用。
答案 4 :(得分:0)
它们不是保留字,因为它们是“全局”(“窗口”属性)函数。 为它们分配值将导致在相同范围内失去其功能,例如:
alert = "sdfsdf";
...
alert("something");
将导致错误,例如“TypeError:alert is not a function”。