3 javascript variables closures scope
我知道在定义函数时会创建作用域。但是我不确定我是否正确理解了在定义嵌套函数或执行嵌套函数时是否也捕获了变量值(在函数中定义并在内部函数中引用,也称为闭包)。
在众所周知的闭包循环方案中,闭环似乎在循环结束时捕获了“ i”值。假设循环5次,则“ i”为4。因此,“ i”将被捕获为4。因此,看起来“ i”仅在执行嵌套函数时被捕获?
如果有人可以指出捕获发生在哪里,将不胜感激。
场景1
var fnName = function(x){
return function(){ return ++x; }; // (is x value captured here?)
};
var fnName1 = fnName(0);
fnName1(); // x=1 (is x value captured here?)
fnName1(); // x=2
Run Code Online (Sandbox Code Playgroud)
方案2
var fnName = function(){
var x = 0;
return function(){ return ++x; }; // (is x value captured here?)
};
var fnName1 = fnName();
fnName1(); // x=1 (is x value captured here?)
fnName1(); // x=2
Run Code Online (Sandbox Code Playgroud)
情况3
var fnName = function(){
var x = 0;
function runFn(){ return x++; }; // (is x value captured here?)
runFn();
};
fnName(); // x=0
fnName(); // x=0
Run Code Online (Sandbox Code Playgroud)
该变量当它宣布被捕获。该值未捕获(这就是它可以更改的原因)。
var fnName = function(x){ // Here
return function(){ return ++x; };
};
var fnName = function(){
var x = 0; // Here (but remember that hoisting exists)
return function(){ return ++x; };
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |