In function: (function是磚墻辰晕,function中的var不可以穿透磚墻痢畜,是局部變量)
function myFunction {
var a = 1;
let q = 2;
console.log(a); //1
}
console.log(a); //undefined
console.log(q); //undefined
function b {
console.log(a); //undefind
}
var此時作為全局變量各聘,可以被myFunciton access到安接,且值被修改
var a = 1;
function myFunction {
a = a + 100;
console.log(a); //101 , a現在是global scope的變量
}
myFunction(); //執(zhí)行myFunction中的內容
console.log(a); //101
對于let 在function中趟径,let 在外面定義墨辛,是global scope variable卓研,可以被function讀取,改變值
let a = 1;
function myFun(){
a = a + 100;
console.log(a); // 101
}
myFun();
console.log(a); //101
對于const 在function中,
const a = 1;
function myFun(){
a = a + 100; // 報錯奏赘,因為 a是常量const寥闪,不可以改變a的值
console.log(a);
}
myFun();
console.log(a);
In if/else, while: (if/else, while不是磚墻,var穿透為global變量)
if {
var a = 1;
console.log(a); //1
let b = 2;
const c = 3;
}
console.log(a); //1
console.log(b);//undefined
console.log(c);//undefined
if對于全局的let和var是可以穿透的磨淌,可以在if中access到疲憋,并且改變值
var b = 100;
let c = 1000;
const d = 11;
if(b === 100){
b = b + 1;
console.log(b); // 101
c = c + 1;
console.log(c); //1001
}
console.log(b); //101
console.log(c); //1001
綜上,在寫javascript時梁只,盡量用let缚柳,不要用var,var是global變量搪锣,let是局部變量
可以參考mdn文檔中的信息:
- var
var x = 1;
if (x === 1) {
var x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 2
- let
let x = 1;
if (x === 1) {
let x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 1
- const
const number = 42;
try {
number = 99;
} catch(err) {
console.log(err);
// expected output: TypeError: invalid assignment to const `number'
// Note - error messages will vary depending on browser
}
console.log(number);
// expected output: 42
const在js中不保護inside的東西
const的array可以被push新元素秋忙,不可以重新初始化