JavaScript中變量提升詳解
ES6之前我們一般使用var來聲明變量,提升簡單來說就是把我們所寫的類似於var a = 1這樣,聲明提升到它所在作用域的頂端去執行,到我們代碼所在的位置來賦值。
如下:這種情況下輸出undefined,變量提升 相當於 var a; (變量定義)提升 , 賦值停留在原地
console.log(a);
var a = 1;
//undefined 變量定義了 但是沒有給變量賦值
// 變量提升 相當於 var a; (變量定義)提升 , 賦值停留在原地
// var a;
// console.log(a);
// a = 1;
多個script標籤的情況下:變量提升不能跨標籤
<script>
// console.log(a);/ 報錯
</script>
<script>
// var a = 1;
</script>
//變量提升不能跨標籤
其他情況:
1.在if語句裏面:
<script>
console.log(a);
// a = 1;
// 在if語句裏面
// console.log(a); // 未定義 1 報錯 2
// if(false){
// var a =1;
// }
// 寫在if語句裏面 也是存在變量提升
// 雖然if沒有執行 ture裏面的內容 但是也存在變量的提升
//在js裏面 var 存在變量聲明提升 如果先使用變量 只會知道 它已經存在 但是如果是在
// 使用之後賦值 我們只能輸出未定義
</script>
2函數:
<script>
// myFuncA(); // 1 2
// function myFuncA() { //函數具有預編譯能力
// alert("哈哈A");
// }
console.log(a);
var a = 10;
console.log(a);
function a(){
console.log("我是A");
}
console.log(a);
輸出:undefined 10 10.
//函數會優先變量 先提升
// function a(){
// console.log("我是A");
// }
// var a;
</Script>
3
<script>
console.log(a);
a = 1; //報錯
這裏要區分和我們第一種的情況
第一種定義了var a=1;
而這裏只是a=1;
我們說過 第一種情況相當於 var a; (變量定義)提升 , 賦值停留在原地
而這裏沒有定義則是報錯
</script>
4
console.log(b);
b();
var b = function(){
console.log(1);
}
// b 是一個變量 只是把一個匿名函數賦值給了變量 b