javascript
学习笔记=《你不知道的JavaScript(上卷)》第三章:函数作用域和块级作用域...
3.1 函數中的作用域
(1)JavaScript具有基于函數的作用域,每聲明一個函數的時候會為其自身創建一個‘氣泡’,這個氣泡內聲明的變量或函數外界無法訪問。
函數作用域的含義是指,屬于這個函數的全部變量都可以在整個函數范圍內使用及復用(事實上在嵌套的作用域中也可以使用)。
?
?
3.2 隱藏內部實現
例子:
var a = 666;function sum(b){return a + b; }function test(){var b = sum(5) + 10;console.log(b); }
這個例子中變量a和方法sum實際上只會在方法test中使用,依照最小特權原則
最小特權原則也稱為最小授權原則和最小暴露原則,這個原則是指在軟件設計中,應該最小限度的暴露必要的內容,將不必暴露的內容隱藏起來。
以上實例應該改為:
function test(){var a = 666;function sum(b){return a + b;}var b = sum(5) + 10;console.log(b); }?
?
3.3 函數作用域
將任意代碼添加添加包裝函數,可以將其中的變量和函數隱藏起來,外部作用域無法訪問包裝函數里面的變量和函數。
var a = 2;function foo(){var a = 3;console.log(a); //3 }foo();console.log(a); //2但是還有點不好的地方,實際上還是創建了一個外部的foo函數,它本身就污染了所在作用域,
且需要在后面調用執行。這個時候可以使用IIFE(自執行),改為:
var a = 2;;(function(){var a = 3;console.log(a); //3 })();console.log(a); //2?
?
?
3.4 塊作用域
JavaScript中實現塊作用域有以下幾種方式:
with:用with從對象中創建出來的作用域僅在with聲明中有效,外部無效。
try/catch:ES3規范中規定,try/catch的catch語句會創建一個塊級作用域,其中聲明的變量只在catch語句中有效。
let:let可以將變量綁定到所在的任意作用域中,也就是說,let聲明的變量,隱式的綁定在本身所在的作用域中。
? ? ? ? ? ? ? const:聲明一個不可修改的變量
//便于可讀,我們可以顯示的為塊作用域添加塊var a = true;if(a){{ //顯示的創建塊let b = 666;console.log(b);} }?
?
總結:JavaScript是基于函數作用域的,每次聲明一個函數,函數中包含的變量和函數外部作用域無法訪問。我們可以通過包裝函數將不必要對外暴露的變量或函數包裝隱藏起來。也可以通過IIFE(自執行函數)來隱藏變量和函數。js中的塊級作用域實現方式有with(不要使用),try/cath的cath語句,let,const等。
?
轉載于:https://www.cnblogs.com/huangzhenghaoBKY/p/9798542.html
總結
以上是生活随笔為你收集整理的学习笔记=《你不知道的JavaScript(上卷)》第三章:函数作用域和块级作用域...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【css】关于pdf分页(page-br
- 下一篇: 解决AxureRP经常性损坏问题