目录
var 声明的作用域
function test() {
var message = "hi";
}
test();
console.log(message);
message 变量是在函数内部又 var 定义的,被解释为一个局部变量,在函数执行完后,在栈区pop,所以报错。
function test() {
message = "hi";
}
test();
console.log(message);
message 变量被解释为一个全局变量,在函数执行后,变量不会被销毁,所以为true。
var 声明提升
function foo() {
console.log(age);
var age = 26;
}
foo();
以上代码价等于
function foo() {
var age;
console.log(age);
age = 26;
}
foo();
所谓提升,就是把所有变量声明都拉到函数作用域顶部,所以不会报错。
let 声明的作用域
let 与 var 最大区别就是 let 是块级作用域,而 var 是函数作用域。
function test() {
for (var t = 0; t < 3; t++) {
console.log(t);
}
console.log(t);
}
test();
如果把以上代码的 var 换成 let,那么最后一个 console.log(t) 就会报错。
而 let 也不能重用同一变量名,这也会报错。
在不同的块中,let会被解释成不同的变量。
function test() {
let t = 0;
for (let t = 0; t < 3; t++) {
console.log(t);
}
console.log(t);
}
test();
以上代码会输出 0 1 2 0 的4个数字,最后一个数字说明此let非彼let。
let 暂时性die区
let 与 var 另一个区别在于,let 不会在作用域中被提升,也就是不会被拉到函数顶部。
console.log(age);
var age;
console.log(test);
let test;
第一个没报错,第二个报错了。这说明let没提升,而var提升了!
刚学,分享一下,感觉不难,就是有点繁琐。
const 关键字
与 let 行为基本相同,不过用 const 声明的不能更改引用,但是可以更改引用里的值
比如 const a = { b: 1 }, a = { c: 1 } // Error ,a.b = 3 // 正确
南无阿弥陀佛,祝你吉祥!