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

    上一节决定在Jenkins中采用Docker作为构建环境,于是就可以为所欲为的使用各种node版本编译我们的项目.解决了版本切换问题.然而,Docker设计的目的就是纯净的执行环境,因此每次运行doc ...

  2. MySQL不停地自动重启怎么办

    近期,测试环境出现了一次MySQL数据库不断自动重启的问题,导致的原因是强行kill -9 杀掉数据库进程导致,报错信息如下: --24T01::.769512Z [Note] Executing ' ...

  3. Gordon家族(一)

    引子 Go语言的吉祥物是一只囊地鼠(gopher),由插画师Renee French设计,名叫Gordon,长得这个样子: 在Go官网上(https://golang.google.cn/)的Gord ...

  4. 100天搞定机器学习|Day8 逻辑回归的数学原理

    机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...

  5. 第二章 javaScript操作BOM

    什么是BOM      BOM(Browser Object Model)即浏览器对象模型.      BOM提供了独立于内容 而与浏览器窗口进行交互的对象:      由于BOM主要用于管理窗口与窗 ...

  6. 金蝶K3 V12.2版本,对已发生业务单据的物料启用辅助计量单位

    /****************************************************************************** 联达双计量单位 yLD_K3Data_S ...

  7. 对ThreadLocal的一些理解

    ThreadLocal也是在面试过程中经常被问到的,本文主要从以下三个方面来谈对ThreadLocal的一些理解: ThreadLocal用在什么地方 ThreadLocal一些细节 ThreadLo ...

  8. html以前没有学到的标签

    <q>标签,短文本引用 <blockquote>标签,长文本引用 <address>标签,为网页加入地址信息 <code>标签,插入单行代码 <p ...

  9. Selenium模拟登陆百度贴吧

    Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...

  10. Zabbix-agentd错误整理

    一.无法启动 (一).当时环境 Firewalld与Selinux,Iptables都为关闭 配置环境 OS:CentOS Zabbix-server IP:10.18.43.71 Hostname: ...