1 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
(┬_┬),在胡亂摸索中把這問題給解決了,其實只是自己對lambda的理解不足及使用錯誤有關(guān)。問題中的函數(shù)參數(shù)的前兩個h、c分別是iview的Table組件自定義模版render時的參數(shù),我自定義了一個函數(shù),包含這兩個參數(shù),同時自己傳多一個數(shù)組。我在內(nèi)部準備使用這些參數(shù),本來這些參數(shù)的作用域已經(jīng)是整個函數(shù)commonGenSelect了,但是我在后續(xù)的代碼中使用了匿名函數(shù),同時異想天開的將這三個參數(shù)作為匿名函數(shù)的參數(shù)傳入,不過此時的匿名參數(shù)已經(jīng)相當(dāng)于定義了一個新的函數(shù)出來,且沒有傳入實參,導(dǎo)致在內(nèi)部代碼報錯undefinded。解決的方法有兩種:
一種是直接將匿名函數(shù)的參數(shù)直接去掉,在匿名函數(shù)代碼塊中使用的變量將是存在于commonGenSelect整個函數(shù)作用域內(nèi)的,此時這些變量就不會為空
()=>{
let OptionArr = new Array();
dataList.forEach(colKV => {
OptionArr.push(h("Option",{
props:{
label:colKV.title,
value:colKV.val
}
}))
});
return OptionArr;
}
第二種方法是,匿名函數(shù)被定義成三個參數(shù)但是沒有被傳入實參,此時我們可以加多一個調(diào)用的步驟,在匿名函數(shù)后進行傳參及調(diào)用
((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)
最后,這個問題也是讓我想到
匿名參數(shù)在定義的時候,要么掛鉤到對應(yīng)的已有函數(shù)中,如
render:(h,c)=>{}
此時其參數(shù)是被固定默認傳入的
要么在定義出自己的匿名參數(shù)后,記得后續(xù)進行傳參來調(diào)用,否則匿名函數(shù)的參數(shù)將是空的
((a,b)=>{console.log(a+b);})(1,3)
添加回答
舉報