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

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

關于es6塊級作用域內函數(shù)聲明的問題

關于es6塊級作用域內函數(shù)聲明的問題

德瑪西亞99 2019-03-12 13:12:55
foo(1)    //報錯{    foo(2)    //2    function foo(v) {        console.log(v)    }    foo(3)    //3}foo(4)      // 4//代碼運行環(huán)境node9.0函數(shù)聲明foo正常情況下在塊級作用域內,被提升到聲明所在到塊級作用域的最上方,所以foo(1)報錯,foo(2),foo(3)成功執(zhí)行,但為什么foo(4)能夠執(zhí)行.雖然了解es規(guī)范為了兼容代碼,允許js引擎按照自己的方式執(zhí)行代碼,但還是無法理解foo(4)為什么能被執(zhí)行,求指點。
查看完整描述

2 回答

?
哈士奇WWW

TA貢獻1799條經(jīng)驗 獲得超6個贊

在早期(es6之前),Block-level 的函數(shù)是一個語法錯誤,但是被瀏覽器兼容且能夠執(zhí)行。所以你的代碼運行環(huán)境在 es5, 就會出現(xiàn)這種 foo(4) 的值為 4 的怪異現(xiàn)象。假若我們讓代碼執(zhí)行在 'use strict' 環(huán)境。


'use strict'

console.log(typeof foo)? // 'undefined'

{

? ? foo(2)? ? //2

? ? function foo(v) {

? ? ? ? console.log(v)

? ? }

? ? foo(3)? ? //3

}

console.log(typeof foo) // 'undefined'

也就是說,執(zhí)行完塊級作用域后,函數(shù) foo() 就被銷毀了。所以,如果要使用 Block-level 函數(shù)時,更好的替代是函數(shù)表達式。


foo(1)? ? //報錯

{

? ? foo(2)? ? // 報錯

? ? let foo = function (v) {

? ? ? ? console.log(v)

? ? }

? ? foo(3)? ? //3

}

foo(4) // 報錯

至于為什么在非 strict mode,foo(4) 不報錯,這應該就涉及到瀏覽器實現(xiàn)問題,對于我們理解這個問題并不重要。

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號