今天带大家了解的是比较有趣的几个变量声明关键字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. 支持微信页面右侧悬浮QQ在线客服

    使用方法: 1.将style里的css样式复制到你的样式表中 2.将body中的代码部分拷贝到你需要的地方即可 (js.图片采用绝对路径,不建议修改) <!DOCTYPE html PUBLIC ...

  2. 史上最全IO流详解,看着一篇足矣

    一:要了解IO,首先了解File类 File类里面的部分常量,方法 No. 方法或常量 类型 描述 1 public static final String pathSeparator 常量 表示路径 ...

  3. 浅谈CMDB

    CMDB和运维自动化 一.运维 运维,指的是对已经搭建好的网络,软件,硬件进行维护.运维领域也是细分的,有硬件运维和软件运维 硬件运维主要包括对基础设施的运维,比如机房的设备,主机的硬盘,内存这些物理 ...

  4. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释

    浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...

  5. 【iOS】The filename 未命名.ipa in the package contains an invalid character(s)

    提交 APP 到苹果官网审核时遇到了这个问题,如图: 其实就是不支持中文,随便换个英文名就行了. 参考:http://blog.csdn.net/u011439689/article/details/ ...

  6. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...

  7. Codeforces Round #192 (Div. 2) (329A)C.Purification

    题意: 在一个正常的点可以净化该行该列的所有细胞,判断是否可以净化所有的细胞,并且输出所选的点. 思路: 如果可以的话,一定会选n个点. 先判断每一行是否有正常细胞,然后判断每一列是否有,如果都没有肯 ...

  8. Asp.Net Core 发布到 Docker(Linux Centos 虚拟机,使用Dockerfile)

    实践一下 Asp.Net Core (基于.net core 2.2)部署到Docker 一.准备工作: 1. 使用Virtualbox创建一个Centos系统的虚拟机,并安装docker和vim 2 ...

  9. C语言数组排序——冒泡排序、选择排序、插入排序

    一.冒泡排序 原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置. 然后比较第二.第三个……直到比较第n-1个和第n个,此时,每一次比较都 ...

  10. 微信小程序云开发报错解决: Setting data field "openid" to undefined is invalid.

    最近在学习微信小程序云开发,刚一开始就遇到了问题. 点击获取openid的时候控制台开始报错: [云函数] [login] user openid:  undefined VM97:1 Setting ...