淺談js中的變量名和函數(shù)名重名
今天騷凱問了一道變量名沖突的題目,感覺很有意思,順便也復(fù)習(xí)一下預(yù)解析的一些知識,有不對的地方忘前輩大神指正,題目是這樣的:
var a=100; function a(){ console.log(a); } a();
這個串代碼執(zhí)行完會報錯 : a is not a function
問題來了,為什么會報這個錯誤呢? 這里涉及到函數(shù)和變量的預(yù)解析:
1)函數(shù)聲明會置頂
2)變量聲明也會置頂
3)函數(shù)聲明比變量聲明更置頂:(函數(shù)在變量上面)
4)變量和賦值語句一起書寫,在js引擎解析時,會將其拆成聲明和賦值2部分,聲明置頂,賦值保留在原來位置
5)聲明過的變量不會重復(fù)聲明
知道以上的規(guī)則,上面的代碼等同于 :
var a=function (){ console.log(a); } var a=100; a();
相當(dāng)于給a重新賦值了,所以會報錯。
以上這篇淺談js中的變量名和函數(shù)名重名就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Javascript中toFixed計算錯誤(依賴銀行家舍入法的缺陷)解決方法
這篇文章主要介紹了Javascript中toFixed計算錯誤(依賴銀行家舍入法的缺陷)解決方法,非常具有實用價值,需要的朋友可以參考下2017-08-08