JavaScript中的词法范围

Phi*_*enn 1 javascript

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

function myFunction() {
   var i=100;
   function f() {
      return i++;
   }
   return f();
};
var X = myFunction();
console.log(X); 
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*tos 6

因为在递增之前f()返回值i.++i如果希望增加后的值,请使用pre-increment().

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

function myFunction() {
   var i=100;
   return function() { return i++; }
};
var X = myFunction();
console.log(X());
Run Code Online (Sandbox Code Playgroud)

  • 是的,但这不会在过程中增加"i",因为它似乎是你想要的. (2认同)