繼續作用域的問題,今天上午看了一會,下午看又看到了乙個型別的題,函式名和變數名相同的問題。之前還不會覺得函式名和變數名重名了會有什麼衝突。也是沒有去測試過。。懶了。直接貼**:
出乎意料的報錯了,有點一頭霧水的感覺。但是一步一步的去分析的話,還是可以明白為什麼會是這個答案。
首先這道題需要和js的預編譯階段掛鉤了,也就是在執行**之前,需要準備的上下文環境;在預編譯階段要準備需要使用到的變數、函式等資源。
變數和變數表示式在預編譯階段得到的是宣告,而沒有賦值,得到undefined;
宣告式函式在預編譯階段得到的是賦值,沒錯,就是直接賦值。
並且準備資源的順序是有先後的,先預編譯 引數 > 函式 > 變數;
那麼這道題可以解析為:
這個時候就可以很好的理解為什麼 a() 這個結果是報錯說a不是乙個function了,人家本來就已經不是function了,已經重新定義賦值為值型別了,當然要報錯咯。
JS 函式名和變數名重名
繼續作用域的問題,今天上午看了一會,下午看又看到了乙個型別的題,函式名和變數名相同的問題。之前還不會覺得函式名和變數名重名了會有什麼衝突。也是沒有去測試過。懶了。直接貼 出乎意料的報錯了,有點一頭霧水的感覺。但是一步一步的去分析的話,還是可以明白為什麼會是這個答案。首先這道題需要和js的預編譯階段掛...
JS中變數名和函式名重名
var x 12 var x 13 function x console.log x 13 err x is not a function x 這個串 執行完會報錯 a is not a function 問題來了,為什麼會報這個錯誤呢?這裡涉及到函式和變數的預解析 1 函式宣告會置頂 2 變數宣告...
JS中變數名和函式名重名
var x 12 var x 13 function x console.log x 13 err x is not a function x 這個串 執行完會報錯 a is not a function 問題來了,為什麼會報這個錯誤呢?這裡涉及到函式和變數的預解析 1 函式宣告會置頂 2 變數宣告...