这个js代码是如何工作的?

时间:2018-06-05 14:06:43

标签: javascript

var foo = 1;
function bar() {
  foo = 10;
  return;
  function foo() {}
}
bar();
console.log(foo);

我不明白为什么这段代码会输出1

2 个答案:

答案 0 :(得分:11)

在功能栏的内部,你定义了一个函数foo,它将在你的函数内部被定义,这意味着你的函数体非常像:

function bar() {
  function foo() {}
  foo = 10;
  return;
}

此功能的范围在条形体内部,因此它与

非常相似
function bar() {
  var foo = function foo() {};
  foo = 10;
  return;
}

这意味着,当您修改foo时,您并未修改全局变量,而只修改bar内的范围。

答案 1 :(得分:6)

功能声明:

  • 被悬挂
  • 使用匹配名称
  • 创建一个局部变量(就像var

所以function foofoo用数字覆盖它之前创建一个局部变量foo = 10

由于变量是本地变量,因此函数内部没有任何内容接触全局变量,该变量也称为foo,因此在第1行设置为1并且永远不会更改。