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. 直接访问实例变量 VS 通过点语法访问实例变量

    直接访问实例变量,不会经过 OC 的方法派发机制,速度比较块.会直接访问对象的实例变量对应的内存. 直接访问实例变量,不会调用"设置方法".绕过了相关属性对应的"内存管理 ...

  2. angular.js的依赖注入解析

    本教程使用AngularJS版本:1.5.3        angularjs GitHub: https://github.com/angular/angular.js/        Angula ...

  3. Java基础梳理(一)

    List和Set比较,各自的子类比较 对比一:Arraylist与LinkedList的比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高 ...

  4. 【xsy1172】 染色 dp

    题目大意:现有$n$条排成一行的木板,每个木板有一个目标颜色.你每次能将一个区间内的木板分别染成它们的目标颜色,而这次染色的代价为这个区间内不同目标颜色的木板的数量的平方.问将全部木板染成目标颜色的最 ...

  5. 数据结构---散列表查找(哈希表)概述和简单实现(Java)

    散列表查找定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到给定值的key的对应f(key) ...

  6. Lingo 做线性规划 - Operation Management Applications

    Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...

  7. Picasso加载网络图片失败,提示decodestream时返回null

    最近遇到一个问题,项目用的图片加载框架是Picasso,网络加载框架是okhttp,项目在加载轮播图时有时可以正常加载,有时,会加载失败,提示decodestream时返回null. 首先,需要确定是 ...

  8. PlanetTogether APS安装与配置

    一.PT 安装 1.PT Server与Client的下载 下载网址:https://download.planettogether.com/ 2.安装.net framework 4.6.2 安装P ...

  9. Python -- Windows编程 -- 注册表

    1.查询开机自启项 startUp.py import re import win32api, win32con def GetValues(fullname): #分割出基本项name[0] nam ...

  10. js函数技巧

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...