计算机安全中,有个常规的原则:用户只能访问他们当前须要的东西。javascript
程序设计中,一般会有一个原则:当即返回原则,也称短路计算。html
ES6 声明变量的六种方法java
ES5 只有两种声明变量的方法:var命令和function命令。ES6除了添加let和const命令。还有另外两种声明变量的方法:import命令和class命令。因此,ES6 一共有6种声明变量的方法。git
理解声明变量,得先了解下做用域。JavaScript只有函数做用域和全局做用域,ES6引入块级做用域es6
做用域内变量提高(var),与变量的声明位置无关。可是变量应该是在声明的时候才使用呀,ES6 let纠正了这种奇怪的状况。web
变量绑定,函数做用域内申明了跟全局同名变量,只要函数做用域声明该变量,它所声明的变量就"绑定"在该区域了,再也不受外部影响。编程
变量篡改,全局做用域容易被篡改数组
暂时性死区,若是区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就造成了封闭做用域。凡是在声明以前就使用这些变量,就会报错。安全
词法做用域,函数的执行语句在函数内运行,而不是在执行它的做用域内运行。即每一个做用域内的变量是相互独立的,全局做用域除外(变量提高的坑)。闭包
变量值的绑定,向外部逐渐扩展,返回查询到的第一个值,结束搜索。
闭包,定义在函数内部的函数,做为子函数用来让外部读取函数内部的局域变量,链接函数内外部。
参考资料:
1.ES6标准入门(阮一峰):http://es6.ruanyifeng.com/#docs/let
2.默语博客:http://www.cnblogs.com/syfwhu/p/4839562.html
3.理解 Javascript 中变量的做用域(伯乐在线):http://web.jobbole.com/82599/?utm_source=blog.jobbole.com&utm_medium=relatedPosts
4.学习Javascript闭包(阮一峰):http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
5.函数式编程入门教程(阮一峰):http://www.ruanyifeng.com/blog/2017/02/fp-tutorial.html
6.JS函数式编程指南(gitbook):https://llh911001.gitbooks.io/mostly-adequate-guide-chinese/content/