var,let和const的区别
在介绍之前,先了解一下全局作用域和局部作用域
// 在函数外定义一个变量,在当前页面任意处都可调用,为全局变量
var name = 'wython';
function myFunc(){
//这里可以调用name
}
// 这里也可以调用name
// 在函数内声明的变量,只能在函数内使用,为局部变量
function myFunc(){
var name = 'wython';
//这里可以调用name
}
// 这里调用不了name
声明变量let
//let声明的变量值在let命令所在的代码块内有效
{ var x=2; } //大括号外面也可以调用 x
{ let x=2; }//大括号外面调用不了 x
// 所以我们如果想在局部使用而不改变全局可以这么写
var i = 5;
for (let i = 0,i<10;i++){
// 逻辑代码
} // 输出全局的i 还是5
let 和 var 的相同点和不同点
// 相同点:
在函数内部使用都是局部变量,只能在函数内使用
在函数外部定义,都是全局变量
//不同点:
但是全局定义的时候var可以使用window访问,let定义的不行
var 关键字可以先使用再声明
let 关键字必须先声明才能使用
// 注意:
在相同的作用域下,不能使用let关键字来重置var定义的变量
var x = 2;
var x = 3;
// 会报错。
声明变量const
// const声明一个或多个常量,声明时必须进行初始化,且常量值就不能改变
const PI = 3.141592653589793;
PI = 3.14; //报错
// const和let相同点
二者都是块级作用域
都不能和它所在作用域内的其他变量或函数同名
// const和let不同点
const声明的常量必须初始化,而let不用
const定义常量的值不能通过再赋值修改,也不能再次声明,let可以
const的本质
//const定义的常量并非不可改变
// 创建常量对象
const car = {type:"Fiat",color:"bule"};
const dog = ['wangwang','write','3']
// 修改属性
car.color = "red";
dog[0] = 'wang';
// 添加属性
car.model = "500";
dog.push('wangcai')
// 但是都不能重新赋值