js學習日記-變量的坑
阿新 • • 發佈:2018-06-12
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學習日記-變量的坑