JS中變量名和函數名重名

var a=100;
function a(){
  console.log(a);
}
a();// a is not a function

 原來javascript

  1. 函數聲明會置頂
  2. 變量聲明也會置頂
  3. 函數聲明比變量聲明更置頂
  4. 變量和複製語句一塊兒書寫,在js引擎解析時,會將其拆成聲明和賦值兩個部分,聲明置頂,賦值保留在原來的位置
  5. 聲明或的變量不會重複聲明

實際上這段代碼等同於java

var a; //函數聲明
var a; //變量聲明(實際上這裏不會重複聲明瞭)
a = function(){ console.log(a); }; //函數賦值
a = 100;//變量賦值(給a從新賦值了)
a()//a is not a function

而若是代碼會以下寫法則a方法會執行函數

var a; //函數聲明
var a; //變量聲明(實際上這裏不會重複聲明瞭)
a = 100; 
a=function(){console.log(123)}//函數賦值
a()//123 
相關文章
相關標籤/搜索