JavaScript 變數的提升以及var對變數的提升
阿新 • • 發佈:2018-12-14
JavaScript宣告過的變數提升往往會影響到我們對變數的正常獲取,所以特寫此文,以便以後使用 。
一 那麼什麼是變數提升呢
js中定義變數的兩種:(注意在方法外不加var是不能定義變數的,出現 xxx is not defined)
- 都加var,在方法內則是區域性變數,在方法外則是全域性變數。
- 在方法內,加var為區域性變數,不加var則是全域性變數(在執行當前方法之後)
<script type="text/javascript"> //變數宣告的提升 function text1(){ var a = "1"; var b = "3"; var c = function(){}; var d = "4"; } //上述程式碼等價於 function text2() { var a,b,c,d; a = "1"; b = "2"; c = function(){}; d = "3"; } </script>
變數提升案例
案例1
由於test1函式裡面定義了變數a,由於
var a = 'I\'m a in all'
function test1 () {
console.info(a)
console.info(window.a)
var a = 'I\'m a in test1'
console.info(a)
}
test1()
上述程式碼相當於
var a = 'I\'m a in all' function test1 () { var a console.info(a) // undefined console.info(window.a) // I'm a in all(因為window指的是全域性環境) a = 'I\'m a in test1' console.info(a) // I'm a in test1 } test1()
案例2
var a = 'I\'m a in all'
function test2 () {
console.info(a) // I'm a in all
a = 'I\'m a in test2' // 這裡原本就是賦值,所以上邊的a會輸出全域性變數
console.info(a) // I'm a in test2
}
案例3
function test3 () { console.info(a) // 報錯(Uncaught ReferenceError: a is not defined) a = 'I\'m a in test3' // 這裡本來就是賦值,所以上邊的a會輸出全域性變數 console.info(a) // I'm a in test3 } test3() console.info(a) // I'm a in test3(本來沒有全域性變數a,當test3執行時,定義了一個全域性變數a,所以這裡會輸出)
最終頁面展示: