lor*_*non 4 javascript closures
虽然开发人员是客户端应用程序,但我遇到了一个错误,我认为这与我对闭包使用的不完全理解有关.我已将我的代码修改为以下内容:
var fn1 = function(arr){
return function(val){
var idx;
var x = 20;
for (idx in arr) {
arr[idx]();
}
}
}
var fn2 = fn1([function(){
x+= 20;
alert(x);
}])
Run Code Online (Sandbox Code Playgroud)
现在执行:
Run Code Online (Sandbox Code Playgroud)
fn2()
我收到一个错误:
ReferenceError: reference to undefined property "x"
我想知道为什么会出现这个错误,为什么fn2不能访问fn1返回的本地闭包函数范围内定义的变量?
简而言之:闭包可以访问与声明它们的位置相关的父作用域,而不是它们的使用位置.
返回的函数fn1可以访问其父函数(fn1本身)的范围,即它可以访问arr.但是数组中的函数无法访问fn1从其返回的函数内或函数内定义的变量,因为这些函数(在数组内部)是在不同的范围内声明的.
关于你试图用该代码解决的实际问题,我不确定我是否正确理解它.看起来你正在尝试将某些功能应用于某个数字.我不明白为什么这个数字(20在你的例子中)是一个常数而不是一个参数.这是我提出的解决方案(没有关闭!):
var applyArrayFunctions = function(arr, x){
for(var i=0; i<arr.length; i++) {
x = arr[i](x);
}
return x;
}
var num = 2;
var fnArray = [
function(val){
return val + 20;
},
function(val){
return val * 2;
}
];
console.log(applyArrayFunctions(fnArray, num));? // logs 44???
Run Code Online (Sandbox Code Playgroud)