1 回答
TA贡献1797条经验 获得超6个赞
(┬_┬),在胡乱摸索中把这问题给解决了,其实只是自己对lambda的理解不足及使用错误有关。问题中的函数参数的前两个h、c分别是iview的Table组件自定义模版render时的参数,我自定义了一个函数,包含这两个参数,同时自己传多一个数组。我在内部准备使用这些参数,本来这些参数的作用域已经是整个函数commonGenSelect了,但是我在后续的代码中使用了匿名函数,同时异想天开的将这三个参数作为匿名函数的参数传入,不过此时的匿名参数已经相当于定义了一个新的函数出来,且没有传入实参,导致在内部代码报错undefinded。解决的方法有两种:
一种是直接将匿名函数的参数直接去掉,在匿名函数代码块中使用的变量将是存在于commonGenSelect整个函数作用域内的,此时这些变量就不会为空
()=>{
let OptionArr = new Array();
dataList.forEach(colKV => {
OptionArr.push(h("Option",{
props:{
label:colKV.title,
value:colKV.val
}
}))
});
return OptionArr;
}
第二种方法是,匿名函数被定义成三个参数但是没有被传入实参,此时我们可以加多一个调用的步骤,在匿名函数后进行传参及调用
((h,c,dataList)=>{
let OptionArr = new Array();
dataList.forEach(colKV => {
OptionArr.push(h("Option",{
props:{
label:colKV.title,
value:colKV.val
}
}))
});
return OptionArr;
})(h,c,dataList)
最后,这个问题也是让我想到
匿名参数在定义的时候,要么挂钩到对应的已有函数中,如
render:(h,c)=>{}
此时其参数是被固定默认传入的
要么在定义出自己的匿名参数后,记得后续进行传参来调用,否则匿名函数的参数将是空的
((a,b)=>{console.log(a+b);})(1,3)
添加回答
举报