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

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

JavaScript中為什么找不到條件語句中定義的函數

JavaScript中為什么找不到條件語句中定義的函數

慕桂英3389331 2018-12-21 19:19:48
在Chrome中實驗以下代碼:function f(){    console.log("outside f()");}+function (){    if(false){        function f(){            console.log("inside f()");        }    }    f(); // Uncaught TypeError: f is not a function}();在外部定義函數f,它輸出"outside f()",而在之后的IIFE中也定義了一個f,然后執行這個f函數,但是輸出Uncaught TypeError: f is not a function。但是,如果我把if條件改為true,則會輸出inside f()。我注意到,這個異常是TypeError類型錯誤,這說明它確實找到了f這個變量,但是它不是一個函數類型,這似乎表明在這個IIFE作用域中已經存在一個f變量,它屏蔽了外部的f函數。我不明白這個機制到底是怎么回事。不是說函數和變量會有一個提升過程嗎?此時無論if語句是什么,內部的f應該是能找到才對,再不濟還可以按照作用域鏈上尋查找到外部定義的f函數呀?此時內部莫名其妙多出一個名為f、值是undefined的變量是怎么回事?可以說在代碼塊中定義一個函數,就會多出一個與這個函數名相同的一個變量嗎?如果是變量提升我還能理解,函數提升我也能理解,但是函數卻以變量形式提升我就有點不明白了。
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 705 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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