JavaScript變量提高

發佈自 Kindem的博客,歡迎你們轉載,可是要注意註明出處。另外,該文章收納在 Kindem的我的的 IT 知識整理倉庫,歡迎 Star、Fork、投稿

介紹

變量提高Hoisting是人們對JavaScript執行上下文工做方式的一種認識,並非官方給出的改變javascript

從字面上理解,變量提高的意思是變量和函數的聲明會在物理層移動到做用域的最前面。可是這樣理解並不許確,效果是相同的,可是實際的實現方式是JavaScript的變量和函數的聲明會在編譯階段放入內存java

這意味着使用者在正式聲明一個函數或者變量以前就可以使用它git

函數的提高

JavaScript中,在聲明一個函數前,咱們就可以使用它,你們應該都體驗過,像這樣:github

test();

function test() {
    // do something
}

在正常的使用狀況下,應該須要先聲明函數才能調用,可是這種方法仍然可以運行,這是由於JavaScript自動將函數聲明事先存入了內存的緣由,看起來就像JavaScript自動把函數聲明提高到了最前面函數

變量的提高

對於變量,JavaScript使用相似的方法,可是要注意一點的是,對於變量的提高,JavaScript只會將變量聲明提高,可是不會把初始化提高,若是在變量初始化以前使用,則會獲得undefinedcode

// undefined
console.log(a);
// ReferenceError: b is not defined
console.log(b);
var a = 10;
// undefined
console.log(num);
num = 6;
// 6
console.log(num);
num += 7;
// 13
console.log(num);
var num;
// undefined
console.log(num);
num = 1;
// 1
console.log(num);
var num = 2;
// 2
console.log(num);

這裏要注意,JavaScript變量提高是針對var的,而letconst不存在變量提高這一特性ip

// ReferenceError: a is not defined
console.log(a);
let a = 10;

一個複雜一點的例子

var a = 100;
function fn() {
    // undefined
    console.log(a);
    var a = 200;
    // 200
    console.log(a);
}
fn();
// 100
console.log(a);
var a;
// 100
console.log(a);
// 300
var a = 300;
console.log(a);
相關文章
相關標籤/搜索