Javascript 当Google Chrome找到两个同名的变量或函数时,它会做什么?

Javascript 当Google Chrome找到两个同名的变量或函数时,它会做什么?,javascript,css,html,google-chrome,Javascript,Css,Html,Google Chrome,当google chrome发现两个同名的变量时,我只是在想google chrome会做什么,在我的例子中,这是:这是代码的一小部分 我的问题是放置Cannon 1(其id为“Cannon1”)可以正常工作,但放置gold collector(其id为“goldC1”)不行,这里发生了什么,我如何修复它 注: “警报”用于测试代码。 该代码在firefox中运行时有效。 我的谷歌浏览器版本是30.0.1599.101 请随时提出任何问题,我们会尽快回答您的问题,谢谢。Chrome,或者更准确地

当google chrome发现两个同名的变量时,我只是在想google chrome会做什么,在我的例子中,这是:这是代码的一小部分 我的问题是放置Cannon 1(其id为“Cannon1”)可以正常工作,但放置gold collector(其id为“goldC1”)不行,这里发生了什么,我如何修复它

注:

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


请随时提出任何问题,我们会尽快回答您的问题,谢谢。

Chrome,或者更准确地说,V8,按照规范要求执行(警告:它真的很沉重)

var
如果您有多个
var x在同一范围内为同一个符号声明,这是无关的,第二个符号根本没有效果但是,注意
var x=1
(例如,带有初始值设定项)实际上是
var x和,分别为
x=1。只有
var x零件将被忽略。如果您重复此操作,则不会执行分配

因此:

…因为该代码真正代表了这一点:

var x;
x = 5;
console.log(x); // 5
x = 42;
console.log(x); // 42
更多:(我博客上的文章)

函数声明 如果在同一作用域中有多个使用相同名称的函数声明,则最后一个将获胜

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

你能在这里举个例子吗?我不会点击你的dropbox中的任何东西。JSFIDLE中的一个例子非常好,即使你知道某个特定的浏览器总是使用第一个或最后一个,这不是一个好主意。使用switch语句,或者了解
是什么,如果
是什么。Scon:代码必须在问题本身中。这就是我认为会发生的事情,而且很容易测试。
//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!"