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

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

js函數(shù)提升問題?

js函數(shù)提升問題?

白衣染霜花 2018-12-20 18:14:43
foo();if (true) {  function foo() {    console.log('1111');  }} else {    function foo() {      console.log('22222');  }}在我理解之中,函數(shù)提升應(yīng)該會忽視if和else的大括號,然后第二個foo覆蓋第一個foo,最后打印222的么?為什么報錯了
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗 獲得超10個贊

ES5 規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級作用域聲明

但是,瀏覽器沒有遵守這個規(guī)定,為了兼容以前的舊代碼,還是支持在塊級作用域之中聲明函數(shù)

ES6 引入了塊級作用域,明確允許在塊級作用域之中聲明函數(shù)。ES6 規(guī)定,塊級作用域之中,函數(shù)聲明語句的行為類似于let,在塊級作用域之外不可引用。


foo();

if (true) {

  function foo() {

    console.log('1111');

  }

} else {

    function foo() {

      console.log('22222');

  }

}

你的代碼如果在es5的環(huán)境下運行,就是你說的情況,但是在es6瀏覽器中為了兼容也做了如下如下規(guī)定(只在es6瀏覽器中)


允許在塊級作用域內(nèi)聲明函數(shù)。

函數(shù)聲明類似于var,即會提升到全局作用域或函數(shù)作用域的頭部。

同時,函數(shù)聲明還會提升到所在的塊級作用域的頭部

所以瀏覽器的 ES6 環(huán)境中,塊級作用域內(nèi)聲明的函數(shù),行為類似于var聲明的變量

因此你的代碼相當(dāng)于


foo();

var foo = undefined

if (true) {

  function foo() {

    console.log('1111');

  }

} else {

    function foo() {

      console.log('22222');

  }

}

應(yīng)該避免在塊級作用域內(nèi)聲明函數(shù)。如果確實需要,也應(yīng)該寫成函數(shù)表達(dá)式,而不是函數(shù)聲明語句


查看完整回答
反對 回復(fù) 2019-01-08
  • 1 回答
  • 0 關(guān)注
  • 399 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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