ES6新语法于2015年发布;而我这个前端小白在17年才接触到。惭愧惭愧!!不过到目前为止,似乎只有FireFox和Chrome对ES6的支持相对良好。不过既然人家ES6已经出来了,还是要跟上技术的潮流。

ES6给我的感觉就是让js越来越靠近传统的编程语言,如java;比如里面的面向对象的思想和语法就很接近java。所以如果有学习后端语言的童鞋的话,理解相对可能会比较好一点。额额。。好像扯得有点距离。

今天就只是说一下新增的let关键字:

传统的 var 关键字1:

以前我们定义变量都是使用的var关键字。那么ES6要新增一个let关键字来替换var的话,原因在哪里?代码中来呈现:

以上只是个很简单的小例子,以求能够说明问题即可。在for循环外面定义了一个变量n并且给它赋了值;而在for循环里面我又定义了一个变量n。循环结束之后在循环的外面调用n的值,结果为5;但是我这个时候想要的n的值是我之前的定义的n的值是等于10;现在却出现了与结果相悖。原因在于js是函数级作用域。上面的那个作用域是属于块级作用域的范围。恰好呢js没有!这就很好理解上面的小例子。也就是说,下面在循环体里面定义的n并不是一个局部变量,而是一个全局变量,它覆盖了上面定义的n。所以n自然是循环之后的结果。那如果我这么写:

得到的结果是多少呢?不言而喻了。既然是函数级作用域了。函数里面的n自然就是局部变量了。在函数外面是无法访问的。

如果说上面的例子不太直观展现的话,可以来看看一个比较经典的例子

运行arr[2]()函数之后的结果是2?还是10?结果又是不如人愿了。是10!!第一次敲得时候感觉有点小失望小崩溃。没有哪里存在语法错误,没有引用错误。但是结果就是10。永远不会得到2。究其原因又是我上面说到的作用域的问题。i这个时候是全局变量了。每一次的循环并不是一个单独体,而是一个受影响的整体。所以数组里的结果都是10;这个需要好好的理解一下。有点不太好懂。

传统的 var 关键字2:

var关键字还有一个比较明显的特质:变量提升的问题。变量提升,就是把变量的定义提升到函数的顶部,但是变量的赋值位置还是不变即赋值不会被提升。上面所说的作用域的问题可以和这个变量提升的问题一起合拢来看,也许对问题就有一个比较全面的理解。

在这个简单的例子中,得到的结果不是报错而是undefined。原因就是变量a,b,c的定义提升了。而值没有提升。那么执行到输出的时候自然是undefined。

上面那个的执行情况如下

这样看应该就比较好理解了。

说了那么多关于var的问题。那么来看看let是如何解决的

关键字let 1:

函数的作用域问题:

let关键字是更像是传统的编程语言中的变量的使用。他使得变量有了块级作用域。

再来看上面那个要出错的循环语句,用let关键字之后:

]

明显得到了想要的结果!!因为用let声明i变量的时候,i不是全局了而是局部。每一次的循环都是一次单独的个体。上一次的不会影响下一次。所以能够得到正解!

关键字let 2:

在之前说过var关键字存在变量的提升问题,也就是变量的定义会提升到顶部。而let则没有这个问题。

i在定义之间进行操作;在let里是不被允许的。而用var的时候不会报错,结果为undefined。这也说明了let不会存在变量提升的问题。所以使用的时候要先定义后使用。

由于let让js具有块级作用域,所以如果在块外面和里面都同时定义了相同的变量;那么块级里面进行操作的时候是不管外面有无定义,只管块级里面。

ES6新语法之let关键字;有别于传统关键字var的使用的更多相关文章

  1. ES6入门五:箭头函数、函数与ES6新语法

    箭头函数的基本用法与特点 函数与ES6新语法 一.箭头函数的基本用法与特点 声明箭头函数采用声明变量和常量的关键字:var.let.const 箭头函数的参数:没有参数用"()"空 ...

  2. ES6新语法

    ES6新语法概览 简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委 ...

  3. ES6新语法的介绍

    对于ES6新语法,阮一峰有一篇文章介绍的挺详细 http://es6.ruanyifeng.com/#docs/destructuring

  4. 总结常见的ES6新语法特性

    前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...

  5. 总结常见的ES6新语法特性。

    前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数 ...

  6. ES6 | ES6新语法 在编码实践中的应用

    本章探讨如何将 ES6 的新语法,运用到编码实践之中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 多家公司和组织已经公开了它们的风格规范,本文的内容主要参考了  ...

  7. ES6新语法(一)

    1.常量         ES5没有定义声明常量的方式,ES6标准中引入了新的关键字const来定义常量.         常量必须给初始值: 常量不能在同一作用域内重新定义或赋值:  <scr ...

  8. ES6新语法概览

    简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委员会(TC39)制 ...

  9. es6新语法系列,查找字符串,模板字符串

    一.模板字符串: ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings).除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起来与 ...

随机推荐

  1. servlet转发与重定向区别

    servlet转发与重定向   HttpServletRequest: 表示浏览器向服务器发送的请求报文,由Tomcat创建然后作为参数传递给我们doget,dopost方法. 功能:getParam ...

  2. day 47 Django 4的简单应用 创建简单的图书管理 (单表的增删改查)

    前情提要  Django  已经学了大半.. 很多东西已经能够使用在生产环境当中 一:模糊查询 二:单表删除 三:单表修改 四:图书管理 图书管理操作 视图结构 A:路由层 A :配置路由文件 参数解 ...

  3. 【LeetCode】390. 消除游戏

    题目 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直 ...

  4. WebDriverAPI(7)

      查看页面元素的属性 测试网址 http://www.baidu.com Java语言版本API实例 @Test public void getWebElementAttribute() { dri ...

  5. androidStudio 打包与混淆

    在gradle中通过makeJar打包 不同模块的gradle都支持打包功能,application module的build.gradle中引入的是com.android.application插件 ...

  6. ActiveMQ学习--001--ActiveMQ和消息中间件

    一.ActiveMQ简介 1,ActiveMQ是什么 ActiveMQ是Apache推出的开源的,完全支持JMS1.1和J2EE 1.4规范的JMS  Provider实现的消息中间件(MOM) 2, ...

  7. static变量生命周期小研究

    A页面:定义一个普通类,类包含一个静态变量a,值为:111111111111111111 B页面:修改a的值为:22222222222222 C页面:用来查看a的值 1.在vs2008中,先打开B,再 ...

  8. Java的try-catch-finally

    Javac语法糖之TryCatchFinally 如下引用文章:https://help.semmle.com/wiki/display/JAVA/Finally+block+may+not+comp ...

  9. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  10. InnoSetup打包时出现Interal error: CallSpawnServer: Unexpected response: $0.错误的解决办法

    如果在使用Innosetup打包软件时,如果出现Interal error: CallSpawnServer: Unexpected response: $0.错误, 如下图: 可以查看 Innose ...