第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

會否是參數作用域問題

會否是參數作用域問題

蕪湖不蕪 2019-02-15 18:12:12
當前我有一個函數:這個函數主要是在使用iview的Table組件進行自定義模版時寫的一個用來生成Select的方法,其中h函數是vue的createElement函數,目前遇到的問題是:我在函數進入的地方進行了console可以打印出dataList對象(不為空),但是在數組里面的lambda函數參數dataList卻是為空。感覺像是變量作用域的問題,不知如何解決,期待大佬~//Select EleGene    function commonGenSelect(h,c,dataList){        //此處的dataList不為空        console.log(dataList[0].title)        return h("Select",{            props:{                name:'constraintColType'            }        },[            (h,c,dataList)=>{                //此處的dataList為空                console.log("commonGenCheckBox >>"+dataList)                let OptionArr = new Array();                dataList.forEach(colKV => {                    OptionArr.push(h("Option",{                        props:{                            label:colKV.title,                            value:colKV.val                        }                    }))                });                    return OptionArr;            }        ])    }
查看完整描述

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)


查看完整回答
反對 回復 2019-02-21
  • 1 回答
  • 0 關注
  • 377 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號