【问题标题】:What does Google Chrome do When It Finds Two Variables or Functions With The Same Name? [closed]谷歌浏览器在找到两个同名的变量或函数时会做什么? [关闭]
【发布时间】:2013-11-09 01:45:43
【问题描述】:

当谷歌浏览器找到两个具有相同名称的变量时,我只是在徘徊它会做什么,就我而言,这将是:See the part code with repeated variables 这是来自code 的一小部分代码 我的问题是放置 Cannon 1(其 id 为“Cannon1”)工作正常,但放置黄金收集器(其 id 为“goldC1”)却不行,这是怎么回事,我该如何解决?

注意事项:

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

如有任何问题,请随时提出,我们会尽快回复,谢谢。

【问题讨论】:

  • 你能在这里发布一个例子吗?我没有点击您的 Dropbox 中的任何内容。
  • jsfiddle 中的示例非常受欢迎
  • 即使您知道特定浏览器总是使用第一个或最后一个,这也不是一个好主意。
  • 使用 switch 语句或了解 else if 是什么。
  • Scon:代码必须在问题本身中

标签: javascript css html google-chrome


【解决方案1】:

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

【讨论】:

  • 这就是我认为会发生的事情,而且很容易测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2021-04-20
  • 1970-01-01
相关资源
最近更新 更多