var与let
-
因为javascript为弱类型语言,所以声明变量时不需要指定变量类型,使用var或let即可。
-
var允许变量的重复声明,let不允许,会报错,推荐使用let。
var v = 1; var v = 2; console.log(v);//2(最后一个声明的变量会覆盖前一个) let l = 1; let l = 2;//Identifier 'a' has already been declared
-
var定义的变量会被绑定到window对象上,let则不会
var v = 1; console.log(window.v);//1 let l = 1; console.log(window.l);//undefined
通过chrome浏览器可以看到使用let定义的变量属于script
-
使用var定义的变量存在变量提升,可以先使用,再定义,let则不行。
v = 1; var v; l = 1; let l;//Cannot access 'l' before initialization
-
var的作用域范围为全局和函数内,let的作用域为块级作用域。
var v = 1; function fun(){ var b = 1 console.log(v)//1 } fun() console.log(b)//b is not defined { var v = 2 let l = 3 } console.log(v)//1 console.log(l)//l is not defined
const
-
const定义的变量为基本类型时,不允许改变。
const c = 1; c = 2;//Assignment to constant variable
-
const定义的变量为对象时,由于变量指向的是对象的内存地址,所以只是内存地址不能改变,
但对象仍然可以改变。
const c = { name: 'zhangsan' }; c.name = 'lisi' console.log(c.name)//lisi c = {}//Assignment to constant variable.