亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

一個關于let塊級作用域的問題,safari和Chrome下表現不一致

一個關于let塊級作用域的問題,safari和Chrome下表現不一致

DIEA 2019-03-04 17:14:43
如題,先上代碼:if(1===1) {    let nameSet = new Set();    if (1 === 2) {        // do nothing    }    else {        function getArrayFromOl() {            console.log('nameSet:', nameSet)        }        getArrayFromOl()    }}這段代碼在 safari 11.0.3 中報錯:ReferenceError: Can't find variable: nameSet但是在 Chrome 中卻能訪問到相關變量。我認為也應該能訪問到相關變量...有沒有大神可以解釋下..safari下為何報錯?
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

  if (1 === 1) {

            let nameSet = new Set();

            if (1 === 2) {

                // do nothing

            } else {

                console.log(nameSet)

                getArrayFromOl(nameSet)

                

                function getArrayFromOl(nameSet) {

                    console.log(nameSet)

                }

            }

        }

ps:函數聲明不要寫在條件語句中,拿出來


補充:

問題主要原因是chrome和safari對于函數在條件語句中聲明表現不一致導致的。可以用以下代碼驗證


        test1() 

        if (true) {

            if (false) {


            } else {

                function test1() {

                    console.log('test') // chrome中報錯,safari中打印出`test`

                }

            }

        }

而題主的問題原因是:在safari中 getArrayFromOl函數相當與已經提升到最外層的if之外,而nameSet由于是let聲明,所以作用域在第一個if內,所以getArrayFromOl取不到相應的值


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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