当我找到两个具有相同名称的变量时,我只是在漫游google chrome所做的事情,对于我的情况,这将是:See the part code with repeated variables这是此code代码的一小部分 我的问题是放置Cannon 1(它的id是'Cannon1')工作正常,但放置黄金收集器(它的id是'goldC1')不会,这里发生了什么,我该如何解决?
注意:
“警报”用于测试代码。 代码在firefox中运行时有效。 我的谷歌浏览器版本是30.0.1599.101
随意提出任何问题,我们会尽快回答,谢谢。
答案 0 :(得分:8)
Chrome,或更准确地说是V8,在§10.5 中完成规范告诉要做的事情(警告:它真的很重要)。
var
如果在同一范围内对同一个符号有多个var x;
声明,则它无关紧要,第二个声明根本没有效果。 但是,请注意var x = 1;
(例如,使用初始值设定项)确实 var x;
,另外,x = 1;
。如果重复,只会忽略var x;
部分,但分配不是。
所以:
var x = 5;
var x;
console.log(x); // 5
var x = 42;
console.log(x); // 42
...因为该代码确实代表了这一点:
var x;
x = 5;
console.log(x); // 5
x = 42;
console.log(x); // 42
更多:Poor misunderstood var
(我博客上的文章)
如果您在同一范围内使用相同名称的多个函数声明,则最后一个胜出。
foo(); // "foo the second!"
function foo() {
console.log("foo the first!");
}
function foo() {
console.log("foo the second!");
}
函数声明与函数表达式不同。以上是声明。我们知道因为函数引用不是立即在表达式中使用(它不在=
的右侧,而是作为参数传递给另一个函数,等等)。函数声明在执行进入定义它们的上下文时发生,在任何逐步运行的代码运行之前。
另一方面,函数表达式在逐步执行时会被处理,就像任何其他表达式一样:
//foo(); // This would be an error
var foo = function() {
console.log("foo the first!");
};
foo(); // "foo the first!"
foo = function() {
console.log("foo the second!");
};
foo(); // "foo the second!"