JavaScript聲明過的變量提高每每會影響到咱們對變量的正常獲取,因此特寫此文,以便之後翻閱。javascript
//變量聲明提高 function test() { var a = "1"; var f = function(){}; var b = "2"; var c = "3"; } //上述代碼等價於 function test() { var a,f,b,c; a = "1"; f = function(){}; b = "2"; c = "3"; }
js中定義變量有兩種狀況:(注意在方法外不加var是不能定義變量的,出現xx is not defined)java
- 都加var,在方法內則是局部變量,在方法外則是全局變量。
- 在方法內,加var爲局部變量,不加var則是全局變量(在執行當前方法以後)
因爲test1函數裏面定義了變量a,因爲git
var a = 'I\'m a in all' function test1 () { console.log(a) console.log(window.a) var a = 'I\'m a in test1' console.log(a) } test1()
上述代碼至關於函數
var a = 'I\'m a in all' function test1 () { var a console.log(a) // undefined console.log(window.a) // I'm a in all(由於window指的是全局環境) a = 'I\'m a in test1' console.log(a) // I'm a in test1 } test1()
var a = 'I\'m a in all' function test2 () { console.log(a) // I'm a in all a = 'I\'m a in test2' // 這裏原本就是賦值,因此上邊的a會輸出全局變量 console.log(a) // I'm a in test2 } test2()
function test3_1 () { console.log(a) // 報錯(Uncaught ReferenceError: a is not defined),阻斷如下代碼的運行 a = 'I\'m a in test3' console.log(a) // 不輸出 } console.log(a) test3_1() console.log(a) // 不輸出
function test3_2 () { a = 'I\'m a in test3' // 全局變量(可是在方法執行後生效) console.log(a) // I'm a in test3 } // console.log(a) // 若是在方法執行前打印,仍是會報錯(Uncaught ReferenceError: a is not defined),阻斷如下代碼的運行 test3_2() console.log(a) // I'm a in test3(原本沒有全局變量a,當test3運行時,定義了一個全局變量a,因此這裏會輸出)
我的博客:午後南雜gitlab