var,const,let的区别

版权声明:转载请留言告知,注明出处 https://blog.csdn.net/qq_36213352/article/details/87705531

1.const定义的变量不可以修改,而且必须初始化。(与Java的static相似)。

const b=6;
//定义后便是常量,无法修改

2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。

var 在外部定义就是全局变量,在函数内部定义就是局部变量;如果局部变量和全局变量重名后者会在函数域中覆盖全局变量,也就是说你无法在该域中正常调用重名的全局变量。

var a=6;
console.log(a);//结果为6
var b;
console.log(b);//结果为undefined
function change(){
 a=4;
}
change();
console.log('函数调用后var定义a为函数内部修改的值'+a);//输出a=4

3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。

let c=3;
console.log('函数外let定义c'+c);//输出c=3
function change(){
let c=6;
console.log('函数内let定义c'+c);//输出c=6
}
change();
console.log('函数调用后let定义c不受函数内部定义的影响:'+c);//输出c=3

PS:JS中加"var"和不加"var"的区别

var num=1;

是在当前域中声明变量,如果是在方法中声明,则为全局变量(local variable);如果在全局中声明,则为全局变量 。

num=1;

事实上是对属性赋值操作。首先,它会尝试在当前作用域链中解析num;如果在任何当前作用域中找到num,则会执行对num属性赋值;如果没有找到num,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造num属性并赋值。

注意!此时它并不是声明了一个全局变量,而是创建了一个全局对象的属性。

Javascript的变量声明、创建属性以及每个Javascript中的每个属性都有一定的标志说明它们的属性:如只读(ReadOnly)、不可枚举(DontEnum)、不可删除(DontDelete)等等。

变量声明自带不可删除属性,比较var num=1和num=1;前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。

var num1=1;
num2=2;
//delete num1;无法删除
//delete num2;删除
function model(){
var num1=1;//局部变量
num2=2;//window的属性
//(function(){
var num=1;局部变量
num1=2;//继承作用域(闭包)
num3=3;//window的属性
}())
}

猜你喜欢

转载自blog.csdn.net/qq_36213352/article/details/87705531