在JavaScript示例中评估范围

时间:2014-05-21 13:08:14

标签: javascript scope

看看这个" CoffeeScript - 加速JavaScript开发"例如:

(function() {
  var age, reincarnate;

  age = 99;

  reincarnate = function() {
    var age;
    age = 0;
    console.log("inner age:", age);
    return age;
  };

  reincarnate();

  console.log("I am " + age + " years old");

}).call(this);

为什么age在此示例中打印到99

reincarnate,一个闭包(据我所知),可以访问age。为什么它的操作不会将age更改为0?

1 个答案:

答案 0 :(得分:2)

由于reincarnate()包含:

var age;
age = 0;

它在自己的范围内重新声明age变量。随后,名称age指的是" new"变量,而不是捕获的变量。

省略var关键字会导致捕获的age变量被修改。