一、let 與 var
let 是在代碼塊內有效,var 是在全局範圍內有效:
{
let a = 0;
var b = 1;
}
a // ReferenceError: a is not defined
b // 1
二、for 循環計數器用let還是var, let更合適
說明:javascript是單線程的,setTimeout()等當前程序線程執行完, 纔開始計時,計時到了之後重新建立一個新的程序線程來執行setTimeout()內的代碼。
//打印出來 i都是3, var是全局範圍內有效,i++ 觸發了3次,特別注意i最後一次++後是3而不是2
for (var i = 0; i < 3; i++) {
setTimeout(function (){
console.log("i:" + i);
});
}
//打印出來 i都是0、1、2, 變量 j 是用 let 聲明的,當前的 i 只在本輪循環中有效,每次循環的 j 其實都是一個新的變量
for (let j = 0; j < 3; j++) {
setTimeout(function (){
console.log("j:" + j);
});
}
以下爲代碼示例:
<html>
<head></head>
<body>
</body>
</html>
<script>
{
let a = "test1";
var b = "test2";
alert("a:" +a) // a:test1
alert("b:" +b) // a:test1
}
alert("b:" +b);// var 是在全局範圍內有效
//alert("a:" +a); // 報錯 ReferenceError: a is not defined let 是在代碼塊內有效
//打印出來 i都是3, var是全局範圍內有效,i++ 觸發了3次,特別注意i最後一次++後是3而不是2
for (var i = 0; i < 3; i++) {
setTimeout(function (){
console.log("i:" + i);
});
}
//打印出來 i都是0、1、2
for (let j = 0; j < 3; j++) {
setTimeout(function (){
console.log("j:" + j);
});
}
</script>