目录
一、var 关键字
语法:
var a = 6;
//声明了变量 a,且初始化为 6
1.1、声明作用域
- 使用 var操作符定义的变量会成为包含它的函数的局部变量
function test(){
var a = 6;
console.log("test()函数内部:",a);//test()函数内部: 6
}
test();
console.log("test()函数外部:",a);//ReferenceError: a is not defined
- 若是在函数内部声明变量时,忽略了var关键字,变量就成了全局变量,规范在全局作用域中声明
function test(){
a = 6;//全局变量,不建议这样声明全局变量
console.log("test()函数内部:",a);//test()函数内部: 6
}
test();
console.log("test()函数外部:",a);//test()函数外部: 6
1-2、var 声明提升(不是变量提升)
function test(){
console.log("a:",a);//a: undefined
var a = 6;
}
test();
以上代码等同于:
function test(){
var a;
console.log("a:",a);//a: undefined
a = 6;
}
test();
1-3 var 声明变量时要注意的两点
- 第一点:变量连“=”定义。
var a = b = 1;
等于 b = 1;
var a = b;
会导致:变量的泄露,b 变量 泄露到全局了。
function test (){
var a = b = 1;
}
test();
console.log('b:',b);
console.log('a:',a);
2. var 变量作用域不受 块限制
{
var aa = 1;
let bb = 1;
}
console.log('a:',aa); // 1
console.log('b:',bb); // 报错,not defined
二、let 声明(ES6新增)
2-1、let 声明作用域:块作用域,所以条件声明无效果。
2-2、let 声明不提升
执行报错
function test(){
console.log("a:",a);//ReferenceError: a is not defined
let a = 6;
}
test();
2-3、var 与 let 在全局作用域中声明的区别
var 变量会成为 window 对象的属性;而 let变量不会。
三、const 声明
const 行为 与 let 基本相同,唯一不同的是 它声明的变量时必须同时初始化变量,且尝试修改const变量会导致运行时的错误。
3-1、必须初始化
function test(){
const a;
console.log("a:",a);//SyntaxError: Missing initializer in const declaration
}
test();
不允许修改
// const 声明
function test(){
const a=6;
a=7;//TypeError: Assignment to constant variable.
}
test();