当Chrome浏览器找到具有相同名称的两个变量或函数时,它会做什么?

时间:2013-10-29 18:16:41

标签: javascript html css html5 google-chrome

当我找到两个具有相同名称的变量时,我只是在漫游google chrome所做的事情,对于我的情况,这将是:See the part code with repeated variables这是此code代码的一小部分 我的问题是放置Cannon 1(它的id是'Cannon1')工作正常,但放置黄金收集器(它的id是'goldC1')不会,这里发生了什么,我该如何解决?

注意:

“警报”用于测试代码。 代码在firefox中运行时有效。 我的谷歌浏览器版本是30.0.1599.101

随意提出任何问题,我们会尽快回答,谢谢。

1 个答案:

答案 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!"