1 回答

TA貢獻1797條經驗 獲得超6個贊
(┬_┬),在胡亂摸索中把這問題給解決了,其實只是自己對lambda的理解不足及使用錯誤有關。問題中的函數參數的前兩個h、c分別是iview的Table組件自定義模版render時的參數,我自定義了一個函數,包含這兩個參數,同時自己傳多一個數組。我在內部準備使用這些參數,本來這些參數的作用域已經是整個函數commonGenSelect了,但是我在后續(xù)的代碼中使用了匿名函數,同時異想天開的將這三個參數作為匿名函數的參數傳入,不過此時的匿名參數已經相當于定義了一個新的函數出來,且沒有傳入實參,導致在內部代碼報錯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)=>{}
此時其參數是被固定默認傳入的
要么在定義出自己的匿名參數后,記得后續(xù)進行傳參來調用,否則匿名函數的參數將是空的
((a,b)=>{console.log(a+b);})(1,3)
添加回答
舉報