計算機安全中,有個常規的原則:用戶只能訪問他們當前須要的東西。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/