1.var
var的使用较let自由,先初始化再定义变量、多次声明相同名称的变量并不会引起错误。
先初始化再定义变量的操作可行是因为var存在变量提升
由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明。这意味着变量可以在声明之前使用,这个行为叫做“hoisting”。“hoisting”就像是把所有的变量声明移动到函数或者全局代码的开头位置。
举例:
console.log(a); //undefined
var a = 100;
var声明的全局变量a会进行变量提升,即var a = 100;会被分解为var a;a=100;代码解析时会将var b;提升到最前面,并且在内存中开辟一个空间,由于a没有被赋值,默认为undefined。
console.log(a); //Uncaught ReferenceError: a is not defined
a = 100;
而这段代码中,当js执行console.log()函数时没有进行var声明,变量没有被提升,不存在内存开辟,所以在console.log()时候直接报错。
2.let
let的用法类似于其他编程语言中的定义变量的用法,较var严格,不存在变量提升,若使用let,先初始化再定义变量、多次声明相同名称的变量将引起错误。
3.const
const声明的是常量,定义后无法修改。必须初始化,否则会报错。需要注意const定义的对象属性可以改变:
const person = {name:"jack", sex="male"};
person.name = "bob"; //可以正确修改
因为对象是引用类型的,person中保存的是对象的指针,修改对象的属性不会改变对象的指针,所以是被允许的。即:const定义的引用类型只要指针不发生改变,其他的改变都是允许的。
若修改指针,让person指向一个新对象,控制台报错:
const person = {name:"jack", sex="male"};
person = {name:"bob", sex="male"};
//报错:Uncaught TypeError: Assignment to constant variable.
另外,javascript属于动态类型语言,不需要指定变量将包含什么数据类型。如以下的操作是合法的:
let myNumber = '500'; //字符串类型
myNumber = 500; //数字类型
使用变量的建议:
1.尽量使用let而不是var
2.始终在作用域顶部声明变量(全局代码的顶部和函数代码的顶部)
本文介绍了JavaScript中var、let和const三种变量声明方式的区别。var存在变量提升,允许重复声明,而let和const则更严格,let不允许变量提升,const定义后不可修改。推荐在编程时优先使用let,始终在作用域顶部声明变量。
668

被折叠的 条评论
为什么被折叠?



