今天带大家了解的是比较有趣的几个变量声明关键字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.

变量声明关键字var ,let,const的更多相关文章

  1. es6 快速入门 系列 —— 变量声明:let和const

    其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...

  2. 详解变量声明加 var 和不加 var 的区别

    在全局作用域中声明变量加 var 关键字和不加 var ,js 引擎都会将这个变量声明为全局变量,在实际运行时,两种声明方式的变量的行为也是几乎一致的.但是在全局作用域下是否声明一个变量的 时候加va ...

  3. js 变量声明 (var使用与不使用的区别)

    js 变量声明 (var使用与不使用的区别) 一.总结 一句话总结:不使用var声明变量的时候,变量是全局对象(window对象)属性,在全局中使用var声明变量是全局变量 var 全局变量 局部变量 ...

  4. JavaScript中变量声明有var和没var的区别

    JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ...

  5. JavaScript 变量声明:var、let、const

    1. 概述 1.1 说明 在ES5 声明变量的方法:var命令和function命令. 在ES6 声明变量的方法:var命令.function命令.let命令.const命令.import命令.cla ...

  6. ES6 - 基础学习(2): 新的变量声明方式 let 与 const

    ES6)新增加了两个重要的 JavaScript 关键字:let 和 const.以前声明变量时只有一种方式:var,ES6对声明方式进行了扩展,现在可以有三种声明方式了. 1.var:variabl ...

  7. c++变量声明、定义,const变量

    变量声明和定义的主要区别: 声明不分配存储空间,定义分配存储空间. 变量可以声明多次,但只能定义一次(一个变量只能在一个源文件中定义) 声明通常放在头文件(.h)中,定义放在源文件(.cpp)中 变量 ...

  8. js中变量声明有var和没有var的区别

    转js中var用与不用的区别 2015年07月13日 16:08:22 阅读数:3627 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种 ...

  9. javascript 变量声明有var与无var 的区别

    1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量.使用var定义var a = 'hello World';function bb(){var a = 'hello B ...

随机推荐

  1. 【git】Git的使用

    一.安装git 1.windows下安装一个Git 2.lInux下yum(apt-get) install git 二.使用git连接github 使用git连接github时,需要将linux下产 ...

  2. python的发展史

    python的发展史 1989年,被称为龟叔的Guido在为ABC语言写插件时,产生了写一个简洁又实用的编程语言的想法,并开始着手编写.因为其喜欢Monty Python喜剧团,所以将其命名为pyth ...

  3. Java NIO ByteBuffer 的使用与源码研究

    一.结论 ByteBuffer 是Java NIO体系中的基础类,所有与Channel进行数据交互操作的都是以ByteBuffer作为数据的载体(即缓冲区).ByteBuffer的底层是byte数组, ...

  4. OI/ACM最全卡常大招

    NO.10: 循环展开: 在缓存和寄存器允许的情况下一条语句内大量的展开运算会刺激 CPU 并发(蛤?这是个什么原理,算了,反正写了没坏处就这么写吧) NO.9: 特殊运算优化:(或许这真的没用) 取 ...

  5. bit、byte、kb、mb、g的区别

    1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024KB1GB=1024MB1TB=1024GB bit是计算机数据的最小单元.要么是0,要么是1. byte 关键 ...

  6. Another option to bootup evidence files

    When it comes to booting up evidence files acquired from target disk, you got two options. One is VF ...

  7. Spring Boot简单环境搭建

    #### 一.创建一个简单的Maven项目 使用`Maven`,通过导入`Spring Boot`的`starter`模块,可以将许多程序依赖的包自动导入到工程中.使用`Maven`的`parent ...

  8. 一文了解:Redis基础类型

    Redis基础类型 Redis特点 开源的,BSD许可高级的key-value存储系统 可以用来存储字符串,哈希结构,链表,集合 安装 windows:https://github.com/micro ...

  9. Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现

    Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现 一.漏洞描述 该漏洞出现在fileserver应用中,漏洞原理:ActiveMQ中的fileserver服务允许用户通 ...

  10. 自定义FutureTask实现

    FutureTask FutureTask是Future的实现,用来异步任务的获取结果,可以启动和取消异步任务,查询异步任务是否计算结束以及获取最终的异步任务的结果.通过get()方法来获取异步任务的 ...