JavaScript中的词法范围

时间:2011-09-04 04:49:24

标签: javascript

为什么100在这里被记录而不是101?

function myFunction() {
   var i=100;
   function f() {
      return i++;
   }
   return f();
};
var X = myFunction();
console.log(X); 

http://jsfiddle.net/PhillipSenn/8fqyh/

1 个答案:

答案 0 :(得分:6)

因为f()在递增之前返回i的值。如果您想要增加后的值,请使用预增量(++i)。

此外,声明f()除了立即调用它之外没有其他目的,这有点奇怪。我认为你的目的是返回一个递增i的函数,并在每次调用时返回新值。要实现此目的,只需返回该函数,然后调用console.log(X())以调用f()并记录递增的值:

function myFunction() {
   var i=100;
   return function() { return i++; }
};
var X = myFunction();
console.log(X());