今天带大家了解的是比较有趣的几个变量声明关键字var,let,const。
我们在最初接触JS的时候,变量是我们重要的一个组成部分,在使用时规定必须要先进行声明,否则网页将会报错:
console.log(b); //b is not defined ,表示我们并没有对变量进行声明,却要调用变量b,这时网页报错b未被定义,这时我们又了解到了声明关键字var的存在,利用声明关键字对变量进行声明:
var a; console.log(a); //undefined,a未被赋值所以为undefined
这时我们就可以使用变量进行各种操作了。但var作为变量声明关键字却并不是那么的严谨与合理:
a = 20 ; //未对变量声明就先对变量进行赋值 console.log(a); //打印出变量的值为20 var a; //声明一个变量
从上面我们可以看出在我们打印之后才对变量进行了声明,为什么没有报错呢,这就是var声明变量的变量提升的的特点,会将var声明的变量提到程序的最前端优先执行,另一个不严谨的地方是:
var a = 10 ; //声明变量a进行赋值 var a = 20 ; //再次对变量a进行声明赋值 console.log(a); //返回值20
var 声明的变量可以进行多次重复的声明。
既然var作为变量声明关键字有那么多不严谨的地方,而我们js是向着更加严谨与合理的方向发展的当然要想出办法解决这种不严谨了,所以在ES6 中又新增另外两种变量声明关键字let 和const
在用法上与var大同小异,但在使用规范上确是更加严谨与合理了:1)不在存在变量提升;2)不允许重复声明同一变量在同一作用域;3)let具有块级作用域(花括号内),之前只有函数具有作用域;
4)存在暂时性死区,就是在变量未声明之前的区域不允许操作变量
// let a = 10 ; //声明变量a进行赋值 // let a = 20 ; //再次对变量a进行声明赋值, // 报错Identifier ‘a‘ has already been declared // a = 20 ; //为先声明对变量进行赋值 // let a; //报错 Cannot access ‘a‘ before initialization初始化之前无法访问‘a‘ // function fn(){ // a = "123"; //在a未被声明的这段区域被称为暂时性死区 // let a = "456"; //报错 a is not defined // } // fn();
const用法和使用与let相同,有唯一的区别是,const存储的是常量,保存的固定内容是地址而不是值,并且地址不允许被修改:
// 数据为固定的值时,地址和值是一体的 // const a = 10 ; // 所以改变了值也就是将地址改变了 // a = 20 ; // console.log(a); //报错 Assignment to constant variable.语义:赋值给常量变量 // 数据为对象时: const obj1 = { name:"haha1" } const obj2 = { name:"haha2" } obj1.name = obj2.name //当改变值时 console.log(obj1); //{name:"haha2"} // obj1 = obj2; //当改变了地址时 // console.log(obj1); //报错Assignment to constant variable.
原文地址:https://www.cnblogs.com/liguanlong/p/11439412.html
时间: 2024-10-11 20:34:49