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)變數宣告也會置頂
3)函式宣告比變數宣告更置頂:(函式在變數上面)
4)變數和賦值語句一起書寫,在js引擎解析時,會將其拆成宣告和賦值2部分,宣告置頂,賦值保留在原來位置
5)宣告過的變數不會重複宣告
知道以上的規則,上面的**等同於 :
var x=function ()
var x=100;
x();
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 a 100 function a a a is not a function 原來函式宣告會置頂 變數宣告也會置頂 函式宣告比變數宣告更置頂 牢記 函式是一等公民 變數和複製語句一起書寫,在js引擎解析時,會將其拆成宣告和賦值兩個部分,宣告置頂,賦值保留在原來的位置 宣告或的變數不會重複宣告...
JS 函式名和變數名重名
繼續作用域的問題,今天上午看了一會,下午看又看到了乙個型別的題,函式名和變數名相同的問題。之前還不會覺得函式名和變數名重名了會有什麼衝突。也是沒有去測試過。懶了。直接貼 出乎意料的報錯了,有點一頭霧水的感覺。但是一步一步的去分析的話,還是可以明白為什麼會是這個答案。首先這道題需要和js的預編譯階段掛...