菜鳥入門指南?JS變量的優先級

VanMagnus 9年前發布 | 13K 次閱讀 JavaScript開發 JavaScript

來自: http://www.cnblogs.com/pssp/p/5224097.html

什么是優先級?就像css中的選擇器,誰的權重越高,那么最終作用的就是誰,在js中變量也是有優先級的。

var a = 10;
function a(){
    console.log(1);
}
a(); //Uncaught TypeError: a is not a function

這里為什么報錯,因為變量a被函數a給覆蓋了,因為函數的聲明比變量的聲明更早,其實這和變量聲明提前有關系,如果你對這個感興趣可以看 js中的執行上下文,菜鳥入門基礎。 這篇文章

var a = 10;
function fn1(a){
    console.log(a);
}
fn1(2); //2

函數中形參的優先級大于全局變量。

var a = 10;
function fn1(a){
    var a = 5;
    console.log(a);
}
fn1(2); //5

函數中的變量優先級大于函數的形參,實際上這里的形參被函數中的變量a給覆蓋了,不相信我們來看這段代碼。

function fn1(a){
    a = 5;
    console.log(a);
}
fn1(2); //5
console.log(a); //a is not defined

如果說函數中的變量a沒有把函數中的形參a給覆蓋的話,那么我們在函數中沒有加var聲明的就是全局變量,那么如果是全局變量的話,那么我們在外部打印這個變量a應該是正確的才對,但是這里卻說a沒有定義,使用可以說明函數中的變量a被形參給覆蓋了。

function fn1(a){
    var a = 5;
    function a(){
        alert('追夢子');
    }
    console.log(a); //5
}
fn1(2);

雖然fn中的函數a在變量a之后定義的,但是因為函數的聲明比變量的聲明提前所以函數a依然被變量a給覆蓋了,所以打印的就是5

</div>

 本文由用戶 VanMagnus 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!