if 和 for 聲明變量的作用域


1.var在if語句內聲明變量

console.log(name);  // 輸出為空
if(true){
	console.log(name); // 輸出為空
	var name="bonly";
	console.log(name); // 輸出為bonly
}
console.log(name); // 輸出為bonly

console.log(name);  // 輸出為空
aa()
function aa(){
    if(true){
    console.log(name); // 輸出為undefined
    var name="bonly";
    console.log(name); // 輸出為bonly
}
  console.log(name); // 輸出為bonly
}
  console.log(name); // 輸出為空

小結:在if內用var聲明變量,雖然if后面是塊級作用域,但是var聲明的變量不支持塊級作用域,該變量會向上冒泡到支持的作用域范圍,也就是函數作用域和全局作用域

2.var在for語句內聲明變量

console.log(i); // 輸出為undefined
for (var i=0;i<5;i++) {
	console.log('內部獲取的'+i);
}
console.log('外部獲取'+i); // 輸出5

小結:在for循環內用var聲明變量,該變量也是全局的

3.let在if語句內聲明變量

console.log(name); // 空,沒有報錯
if(true){
	let name="bonly";
	console.log(name); // bnonly
}
console.log(name); // 空,沒有報錯
 
 // 千萬注意,別以為是文檔定義錯了,這里沒有報錯的原因是window對象上有name屬性,並且為“”,坑不坑 
console.log(aaa); // 報錯
if(true){
    console.log(aaa); // 報錯
	let aaa="bonly";
	console.log(aaa); // bnonly
}
console.log(aaa); // 報錯

小結:在if內用let聲明變量,該變量是局部的,並且沒有變量提升

4.let在for語句內聲明變量

console.log(i); // 報錯
for (let i=0;i<5;i++) {
	console.log('內部獲取的'+i);
}
console.log('外部獲取'+i); // 報錯

小結:在for內用let聲明變量,該變量是局部的,並且沒有變量提升


免責聲明!

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



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