2021-03-05
阅读:73
使用var可以定义全局变量,没有块级作用域的概念,比如:for循环中用var定义的变量,在for循环结束之后依然可以使用
for(var i=0;i<10;i++){}
console.log(i);//10
var 定义的变量存在变量提升,无论实际定义的位置,都会视为在全局作用域(或者函数顶部)
console.log(a);//undefined
var a = 1;
//实际相当于
var a;
console.log(a);
a = 1;
let 是块级作用域,不存在变量提升,如果在定义之前使用变量的话就会报错 在let 声明变量之前,该变量都是不可用的,在语法上,称为 暂时性死区
console.log(num);
let num = 10;
let 在同一作用域内不能重复定义,重复定义会报变量已声明的错误
let num = 1;
let num = 2
因为let 是块级作用域,所以在函数内部重新定义之后不会改变函数外部的值
let num = 1;
function test(){
let num = 2;
}
test();
console.log(num);//1
const 也是块级作用域,在定义的时候必须赋值,而且定义之后不允许再修改
const 声明的限制只适用于它指向的变量引用,换句话说,如果const变量引用的是一个对象,那么修改这个对象的内部属性并不违反 const 的限制
//如果定义的时候没有赋值,则会报错
const num;
// const person = {}
person.name = '张三' // ok
person = {} //报错
//块级作用域
const num = 1;
function test(){
const num = 2;
}
test();
console.log(num);//1