javascript - 关于函数闭包、函数作为参数传递疑问
本文介绍了javascript - 关于函数闭包、函数作为参数传递疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
1.描述:
我想得到一个函数数组 result ,首先func函数向数组result里添加匿名函数(每个匿名函数都保存了各自的num)
但是我将return 后面的匿名函数我用参数传进来,相当于只是做了替换而已,为什么结果却不同呢。
function func(){
var result =[] ;
for(var i=0;i<3;i++){
result.push(
function (num){
return function (){
return num
}
}(i)
)
}
return result
}
console.log(func()[1]()) //这样我就能得到各自函数里的num
下面我将 return 后面匿名函数作为参数传进去就获取不到。
function func(fn){
var result =[] ;
for(var i=0;i<3;i++){
result.push(
function (num){
return fn;
}(i)
)
}
return result
}
function fn(){
return num
}
console.log(func(fn)[1]()) //报错提示num未定义
解决方案
因为第二段代码中的fn是定义在全局环境中的。
你可以看看这里和下边的代码,希望对你有帮助
function func(fn){
var result =[] ;
for(var i=0;i<3;i++){
result.push(
function (num){
return fn;
}(i)
);
}
return result;
}
function fn(){
return num;
}
var num = 1;
console.log(func(fn)[1]()); //1
这篇关于javascript - 关于函数闭包、函数作为参数传递疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文