1. 程式人生 > >js學習日記-變量的坑

js學習日記-變量的坑

ons 需要 func 同時 註意 可見 報錯 所在 函數表

js變量細節是前端面試經常遇到的問題,可見其重要程度,要想掌握這個知識點,需註意以下幾點:

變量提升

所謂變量提升,就是使用了var關鍵字申明的變量,會提升到所在作用域的頂部。es5的作用域分為全局作用域和函數作用域,es6(es2015)增加了塊級作用域

  function test(){
    console.log(i); //輸出undefined而不是報錯
    var i=5;
  }

 上面代碼實際上等於

  function test(){
    var i;
    console.log(i); //輸出undefined而不是報錯
    i=5;
  }  

需要註意的是函數表達式中的var也存在變量提升。

不加var的變量

當一個變量沒有使用var關鍵字申明時,執行到該語句時,對應的變量會變成全局變量(不管是不是在函數中聲明的),等同於windows.xxx=y;

  function test(){
    i=5;
    console.log(i); 
  }
  try{
    console.log(i);
  }
  catch(e){
    console.log(‘還沒有執行到i=5,出錯啦‘)
  }
  test();
  //訪問函數後,i=5執行,變成全局變量了,因此下一句可以順利執行
  console.log(‘驗證i是否變成了全局變量,i=‘+i);

全局變量名與函數作用域變量名相同時會發生什麽?

既然變量存在全局作用域和函數作用域,那個兩個作用域中有同名變量也是互不影響的

  var i=5;
  function test(){
    var  i=2;
    console.log(‘我是函數中的i,i=‘+i); //2
  }
  test();
  console.log(‘我是全局中的i,i=‘+i); //5

訪問一個不存在的變量會發生什麽?

訪問未顯示申明或隱式申明的變量時,js引擎直接拋出錯誤。

js學習日記-變量的坑