菜鳥入門指南?JS變量的優先級
來自: 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!