js筆記——js里var與變量提升


var是否可以省略

一般情況下,是可以省略var的,但有兩點值得注意:

1、var a=1a=1 ,這兩條語句一般情況下作用是一樣的。但是前者不能用delete刪除。不過,絕大多數情況下,這種差異是可以忽略的。
2、在函數內部,如果沒有用var 進行申明,則創建的變量是全局變量,而不是局部變量了。

所以,建議變量申明加上var關鍵字。

變量提升

JavaScript引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運行。這造成的結果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫做變量提升(hoisting)。

示例:

console.log(a);
var a =1;

以上語句並不會報錯,只是提示undefined。實際運行過程:

var a;
console.log(a);
a =1;

表示變量a已聲明,但還未賦值。但是變量提升只對var命令聲明的變量有效,如果一個變量不是用var命令聲明的,就不會發生變量提升。

console.log(aa);
aa =1;

以上代碼將會報錯:ReferenceError: aa is not defined


與普通變量一樣,js里的function也可看做變量,也存在變量提升情況:

a();

function a(){
    console.log(1);
};

表面上,上面代碼好像在聲明之前就調用了函數a。但是實際上,由於“變量提升”,函數a定義部分被提升到了代碼頭部,也就是在調用之前已經聲明了。但是,如果采用賦值語句定義函數,JavaScript就會報錯:

a();

var a = function(){
    console.log(1);
};

// TypeError: a is not a function

因為,實際運行過程:

var a;
a();

a = function(){
    console.log(1);
};

這時候a是個變量,並非function

參考:
http://javascript.ruanyifeng.com/grammar/basic.html#toc3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM