今天騷凱問了一道變量名沖突的題目,感覺很有意思,順便也復習一下預解析的一些知識,有不對的地方忘前輩大神指正,題目是這樣的:
var a=100;function a(){ console.log(a);}a();這個串代碼執行完會報錯 : a is not a function
問題來了,為什么會報這個錯誤呢? 這里涉及到函數和變量的預解析:
1)函數聲明會置頂
2)變量聲明也會置頂
3)函數聲明比變量聲明更置頂:(函數在變量上面)
4)變量和賦值語句一起書寫,在js引擎解析時,會將其拆成聲明和賦值2部分,聲明置頂,賦值保留在原來位置
5)聲明過的變量不會重復聲明
知道以上的規則,上面的代碼等同于 :
var a=function (){ console.log(a);}var a=100;a();相當于給a重新賦值了,所以會報錯。
以上這篇淺談js中的變量名和函數名重名就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。
|
新聞熱點
疑難解答