javascript如何与';作为函数返回';作品

javascript如何与';作为函数返回';作品,javascript,function,return-type,Javascript,Function,Return Type,我试图理解javascript函数如何返回函数句柄,以及为什么下面的代码打印“2”而不是“1” var num=01; 函数processAndIncrement(){ var进程=函数(){ console.log(num); } num++; 返回过程; } var proCall=processAndIncrement(); proCall()变量num独立于代码中的函数。这两个函数都引用同一个变量,因此它们都对相同的数据进行变异并观察变化 因此num++操作在调用proCall之前递增

我试图理解javascript函数如何返回函数句柄,以及为什么下面的代码打印“2”而不是“1”

var num=01;
函数processAndIncrement(){
var进程=函数(){
console.log(num);
}
num++;
返回过程;
}
var proCall=processAndIncrement();

proCall()
变量
num
独立于代码中的函数。这两个函数都引用同一个变量,因此它们都对相同的数据进行变异并观察变化

因此
num++
操作在调用
proCall
之前递增
num
。最后调用
proCall
时,它会看到
num
的递增状态,因为它已经递增了


以下是操作顺序的逐步说明(忽略吊装)。按照数字的顺序

// 1. create the variable
var num = 01;

// 2. create the processAndIncrement function
function processAndIncrement() {

  // 4. Assign a function that logs `num` to the `process` variable
  var process = function() { 

    // 8. log the current value of `num` (which was incremented at step 5)
    console.log(num); 
  }

  // 5. increment `num`
  num++;

  // 6. return the `process` function
  return process;
}

// 3. Invoke processAndIncrement, and assign its return value to `proCall`
var proCall =  processAndIncrement();

// 7. invoke `proCall` (which is the same as the `process` function)
proCall();

如果您希望在调用
proCall
时发生增量,则应将
num++
移动到
进程
函数中。

代码打印
2
,因为您增量
num
的值已经是
1
(01==1)

是的,它返回一个函数句柄。调用时,将输出当前值
num
。您特别不了解的是,为什么希望它记录
1
(并且从不递增)?对
processAndIncrement
的调用递增
num
(这是一个全局变量)并返回另一个记录
num
(现在是
2
)的函数。