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

Blo*_*lob -3 html javascript css html5 google-chrome

我只是闲逛时找到具有相同名称的两个变量,对我来说,谷歌浏览器是什么,这将是:见反复变量的部分代码是代码的一小部分,从这个代码 我的问题是,把炮1(它的ID是"Cannon1")工作正常,但将黄金收集器(它的ID是"goldC1")没有,这是怎么回事,我该如何解决?

笔记:

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

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

T.J*_*der 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
Run Code Online (Sandbox Code Playgroud)

...因为代码真的代表了这个:

var x;
x = 5;
console.log(x); // 5
x = 42;
console.log(x); // 42
Run Code Online (Sandbox Code Playgroud)

更多:可怜的误解var (我博客上的文章)

功能声明

如果在同一范围内使用相同名称的多个函数声明,则最后一个胜出.

foo(); // "foo the second!"

function foo() {
    console.log("foo the first!");
}

function foo() {
    console.log("foo the second!");
}
Run Code Online (Sandbox Code Playgroud)

函数声明与函数表达式不同.以上是声明.我们知道,因为函数引用不会立即被在表达式中使用(它不是一个企业的右侧=,被传递到另一个函数作为参数,等等).函数声明当执行进入他们所定义,其中的上下文中,任何步骤的分步代码运行在所有之前发生.

功能表达

函数表达式,在另一方面,是在一步一步执行到达它们,就像任何其他表达处理:

//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!"
Run Code Online (Sandbox Code Playgroud)