第一部分:ES6新增了块级作用域,let关键字用于声明变量,相较于var而言,let关键字不存在声明提前. 1.ES6真正的出现了块级作用域,使用双花括号括住并在其中用let声明变量,会存在暂时性死区,在作用域外面使用变量会报错. 2.在循环中,如for循环,let命令相较于var命令会更好,原因在于所声明的变量不会提前到全局.那么在循环结束以后再调用该变量将无法访问. 3.如果是使用var的for循环,如 var a = []; for (var i = 0; i < 10; i++) { a…
let声明 const声明 块级作用域 spread/rest 一.let声明与块作用域 在ES6之前,JavaScript中的作用域基本单元就是function.现在有了let就可以创建任意块的声明,也被称为作用域块.这意味者只需要“{}”就可以创建一个作用域.不再像var声明变量那样总归属于包含函数或全局.例如: var a = 2; { let a = 3 console.log(a); } console.log(a); 在相关的资料中看到有介绍,let声明在被正式列入标准之前长这样:…
在ES6以前,ES不支持块级作用域,只有全局作用域和函数作用域,所有变量的声明都存在变量声明提升. 1.let 关键字 声明一个块级变量,只在一个代码块中有效,如果在块外面访问便会报错,如下所示: { let a = 1; var b = 1; } a;b; ReferenceError: a is not defined //没有定义 let命令非常适合循环语句,如下所示 var a = []; for( let j=0; j<9 ;j++){ a[j] = function(){ conso…
本章涉及3个知识点,var.let.const,现在让我们了解3个关键字的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方声明的,都会提升到当前作用域的最顶部,这种行为叫做变量提升(Hoisting) 也就是说,如果在函数内部声明的变量,都会被提升到该函数开头,而在全局声明的变量,就会提升到全局作用域的顶部. function test() { console.log('1: ', a) //undefined if…
众所周知,js中的var声明存在变量提升机制,因此ESMAScript 6引用了块级作用域来强化对变量生命周期的控制let const 声明不会被提升,有几个需要注意的点1.不能被重复声明 假设作用域中已经存在某个标识符(无论该标识符是通过var声明还是let.const变量声明),此时再使用let或const关键定声明会抛错 var count=10 let count=20// 此处则会抛出错误,因为同一作用域内不能重复声明 如果当前作用域内嵌另一个作用域,便可在内嵌的作用域中用let声明同…
原本只有函数作用域和全局作用域两种,这就导致出现很多不方便的地方: 1)for循环问题:在看js高程的时候,纠结在第七章好久,就是一个这样的实例 function createFunctions(){ var result = new Array(); for (var i = 0 ; i < 10 ; i ++){ result[i] = function (){ return i; } } return result; } 不管这段代码输出result[i]()中的i是几,结果都是10,这就…
let声明变量 用法类似于var,但是所声明的变量只在let所在的代码块内有效. 1 . 在ES6环境下,let声明的变量不能在声明之前调用. 例: console.log(i); //会报错,这叫做暂时性死区,会提示 i 未定义 let i ; let不允许在变量还没声明完成前,赋值给其他变量,或者是自己 let a = a; //报错 应该先声明,再赋值 let a ; a = 1; 或者直接赋值 let a = 1; var b = b; //不会报错,但是会返回undefined,没有赋…
一.基本语法-let命令 (1)ES6新增了let命令,用来声明变量.所声明的变量,只在let命令所在的代码块内有效. 循环的计数器,就很合适使用let命令.计数器i只在for循环体内有效,在循环体外引用就会报错. 另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域. (2)不存在变量提升 var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined. 为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在…
1.介绍 总的来说,ES6是在ES2015的基础上改变了一些书写方式,开放了更多API,这样做的目的最终还是为了贴合实际开发的需要.如果说一门编程语言的诞生是天才的构思和实现,那它的发展无疑就是不断填坑的历史.ES6正是为了填一些坑. 我对ES6语法的学习,主要在浏览器端,参考阮一峰大神的ES6入门教程,添加了一些个人理解的注释和遇到的小问题,欢迎批评指正,共同进步.  浏览器端引用的依赖文件和本文案例  可在https://github.com/chanceLe/ES6-Basic-Synta…
我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作用域的情况下出现的问题:   一.在if或者for循环中声明的变量会泄露成全局变量 for(var i=0;i<=5;i++){ console.log("hello"); } console.log(i); 二.内层变量可能会覆盖外层变量 var temp = new Date()…