1. 程式人生 > >JavaScript理解筆記—變數提升 全域性作用域 名字空間

JavaScript理解筆記—變數提升 全域性作用域 名字空間

JavaScript會掃描整個函式體,把所有申明的變數提升到函式頂部。
注:var x=‘Tom’ 只提升宣告,不提升賦值。
例如:console.log(x);var x=‘Tom’; 
執行不會報錯,輸出為:undefined
上述語句等效為:var x;console.log(x);x=‘Tom’;
所以在函式內定義變數時,要首先宣告所有變數。


在函式外定義的變數為全域性作用域,JavaScript預設有一個物件:window
全域性作用域的變數實際上是被繫結到window的一個屬性上。
例如:var course=‘99’;
直接訪問course和訪問window.course是一樣的。


全域性變數會繫結在window上,不同的JavaScript檔案若使用相同全域性變數或定義了相同名字的頂層函式,會造成命名衝突。
解決衝突方法:把所變數和函式全部繫結到一個全域性變數裡。
如:var MYAPP={}; //唯一全域性變數
MYAPP.name=‘Tom’;    //其他變數
MYAPP.foo= function(){return ‘foo’ ;};


塊級作用域   let(代替var宣告塊級作用域)
如: for(let i=0;i<10;i++){ 
i=100;}
則不能在for迴圈體之外使用變數i。

常量 const  (塊級作用域)