一次又一次地使用变量名是否有效?例如:
function clicks() {
var foo = document.getElementById("cat");
foo.click();
var foo = document.getElementById("dog");
foo.click(); // Again! This works, but may be it is not valid?
}
或者我应该使用唯一的变量名称,如下所示?
function clicks() {
var foo1 = document.getElementById("cat");
foo1.click();
var foo2 = document.getElementById("dog");
foo2.click();
}
答案 0 :(得分:1)
是的,它是有效的。这是因为翻译"升降机"变量声明。也就是说,它将声明移动到当前函数范围的顶部。
对于口译员,您的代码"看起来"像这样:
function clicks () {
var foo;
foo = /* something */
foo = /* something */
}
现在,如果您不想要这种行为,可以使用保留在当前范围内的let
。例如:
function bar () {
if (true) {
let foo = 5
}
console.log(foo) // not defined
// you would need to declare foo again with `let foo = ...`
}
答案 1 :(得分:-1)
覆盖变量的值没有错。请注意,它可能会使您的应用程序的行为更加混乱,例如,如果读取您的代码的人错过了您重新声明变量的位置。请注意,在您宣布之后,您可以foo = document.getElementById("dog");
代替var foo = document.getElementById("dog");
。
答案 2 :(得分:-1)
从技术上讲,是的,您可以使用多个具有相同名称的变量,但它们都将共享同一个实体。它只是该名称下的一个变量。
但实际上你应该避免这种情况。
答案 3 :(得分:-2)
您无法在js中实例化变量,因此var foo
两次甚至不能正常工作:/
解决方案是使用类似的东西
function clicks() {
var foo = document.getElementById("cat");
foo.click();
//remove var in this line...
foo = document.getElementById("dog");
foo.click(); // Again! This works, but may be it is not valid?
}