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