摘要:前言這里我們不討論作用域鏈的問(wèn)題,這些問(wèn)題您可以看下我之前寫的東西,通過(guò)這一段代碼,讓我們重新認(rèn)識(shí)。這回我們主要來(lái)分享一下,中作用域的創(chuàng)建方式。立即執(zhí)行函數(shù)是個(gè)不錯(cuò)的選擇,但具名的立即執(zhí)行函數(shù)可以讓代碼本身更具有可讀性,是個(gè)最佳實(shí)踐。
前言
這里我們不討論作用域鏈的問(wèn)題,這些問(wèn)題您可以看下我之前寫的東西,通過(guò)這一段代碼,讓我們重新認(rèn)識(shí)JavaScript。
這回我們主要來(lái)分享一下,JavaScript中作用域的創(chuàng)建方式。
通過(guò)理解代碼來(lái)記住知識(shí)點(diǎn)是最快的,面試官問(wèn)道類似的問(wèn)題的時(shí)候,舉個(gè)代碼的例子就大家都懂了,勝過(guò)任何含糊的概念描述,所以我們來(lái)看一下這個(gè)代碼的例子吧。
rank-01請(qǐng)思考輸出結(jié)果,for循環(huán)的{}能創(chuàng)建一個(gè)作用域嗎?
for (var i = 0; i < 2; i++) { console.log("in for:"+i); } console.log("out for:"+i);rank-02
請(qǐng)思考代碼運(yùn)行結(jié)果,function應(yīng)該能創(chuàng)建作用域吧?
function forscope(){ for (var i = 0; i < 2; i++) { console.log("in for:"+i); } }; forscope(); console.log("out for:"+i);rank-03
為什么這樣寫會(huì)更好呢?
(function(){ for (var i = 0; i < 2; i++) { console.log("in for:"+i); } })(); console.log("out for:"+i);rank-04-a
老外說(shuō),這樣子寫才是最佳實(shí)踐,您看出來(lái)門道了嗎?
(function forscope(){ for (var i = 0; i < 2; i++) { console.log("in for:"+i); } })(); console.log("out for:"+i);rank-04-b
這樣寫太鬼了吧?
try{ undefined(); }catch(i){ for (i = 0; i < 2; i++) { console.log("in for:"+i); } } console.log("out for:"+i);rank-es6-01
現(xiàn)在能體會(huì)到es6中l(wèi)et存在的意義了吧?
for (let i = 0; i < 2; i++) { console.log("in for:"+i); } console.log("out for:"+i);rank-es6-02
據(jù)說(shuō)這才是最佳實(shí)踐!
{ let i; for (i = 0; i < 2; i++) { console.log("in for:"+i); } } console.log("out for:"+i);總結(jié)
function,try catch均可以創(chuàng)建作用域,可以使用它們來(lái)更好地保護(hù)代碼細(xì)節(jié),一般還是用function,try catch一般是代碼轉(zhuǎn)換器會(huì)用的。
立即執(zhí)行函數(shù)(function(){...})();是個(gè)不錯(cuò)的選擇,但具名的立即執(zhí)行函數(shù)可以讓代碼本身更具有可讀性,是個(gè)最佳實(shí)踐(function forscope(){...})();。
es6中l(wèi)et可以隱式地和最近的{}一起創(chuàng)建一個(gè)作用域,但顯示地創(chuàng)建能夠方便之后代碼塊的移動(dòng),是個(gè)最佳實(shí)踐。
其他參考書
《你不知道的JavaScript(上卷)》第一部分,亞馬遜電子書9.9元,強(qiáng)力推薦
網(wǎng)站
在線es6編輯器,https://babeljs.io/repl/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79341.html
摘要:也毫不例外,但在中作用域的特性與其他高級(jí)語(yǔ)言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個(gè)核心知識(shí)點(diǎn)。主要使用的是函數(shù)作用域。 關(guān)于作用域:About Scope 作用域是程序設(shè)計(jì)里的基礎(chǔ)特性,是作用域使得程序運(yùn)行時(shí)可以使用變量存儲(chǔ)值、記錄和改變程序的狀態(tài)。JavaScript 也毫不例外,但在 JavaScript 中作用域的特性與其他高級(jí)語(yǔ)言稍有不同,這是很多學(xué)習(xí)者久久難以理清的一個(gè)核...
摘要:查詢是在作用域鏈中,一級(jí)級(jí)的往上查找該變量的引用。作用域和作用域鏈作用域的概念,應(yīng)該兩張圖幾句話就能解釋吧。這個(gè)建筑代表程序中的嵌套作用域鏈。一層嵌一層的作用域形成了作用域鏈,變量在作用域鏈中的函數(shù)內(nèi)得到了自己的定義。 javascript作用域和閉包之我見 看了《你不知道的JavaScript(上卷)》的第一部分——作用域和閉包,感受頗深,遂寫一篇讀書筆記加深印象。路過(guò)的大牛歡迎指點(diǎn)...
摘要:閉包利用的,其實(shí)就是作用域嵌套情況下,內(nèi)部作用域可以訪問(wèn)外部作用域這一特性。之所以要將閉包和垃圾回收策略聯(lián)系在一起,是因?yàn)檫@涉及到閉包的一些重要特性,如變量暫時(shí)存儲(chǔ)和內(nèi)存泄漏。因?yàn)槟涿瘮?shù)回調(diào)的閉包實(shí)際引用的是變量,而非變量的值。 本文旨在總結(jié)在js學(xué)習(xí)過(guò)程中,對(duì)閉包的思考,理解,以及一些反思,如有不足,還請(qǐng)大家指教 閉包---closure 閉包是js中比較特殊的一個(gè)概念,其特殊之處...
摘要:寫在前面對(duì)于一個(gè)前端開發(fā)者,應(yīng)該沒(méi)有不知道作用域的。欺騙詞法作用域有兩個(gè)機(jī)制可以欺騙詞法作用域和。關(guān)于你不知道的的第一部分作用域和閉包已經(jīng)結(jié)束了,但是,更新不會(huì)就此止住未完待續(xù) 這是《你不知道的JavaScript》的第一部分。 本系列持續(xù)更新中,Github 地址請(qǐng)查閱這里。 寫在前面 對(duì)于一個(gè)前端開發(fā)者,應(yīng)該沒(méi)有不知道作用域的。它是一個(gè)既簡(jiǎn)單有復(fù)雜的概念,簡(jiǎn)單到每行代碼都有它的影子...
摘要:請(qǐng)用一句話描述什么是閉包,并寫出代碼進(jìn)行說(shuō)明。閉包的使用場(chǎng)景使用閉包可以在中模擬塊級(jí)作用域閉包可以用于在對(duì)象中創(chuàng)建私有變量。 引言 剛學(xué)習(xí)前端的時(shí)候,看到閉包這個(gè)詞,總是一臉懵逼,面試的時(shí)候,問(wèn)到這個(gè)問(wèn)題,也是回答的含含糊糊,總感覺(jué)有層隔膜,覺(jué)得這個(gè)概念很神奇,如果能掌握,必將功力大漲。其實(shí),閉包沒(méi)有這么神秘,它無(wú)處不在。 一個(gè)簡(jiǎn)短的的問(wèn)題 首先,來(lái)看一個(gè)問(wèn)題。 請(qǐng)用一句話描述什么是閉...
閱讀 1475·2021-11-24 09:39
閱讀 1789·2021-11-22 15:25
閱讀 3741·2021-11-19 09:40
閱讀 3300·2021-09-22 15:31
閱讀 1302·2021-07-29 13:49
閱讀 1211·2019-08-26 11:59
閱讀 1321·2019-08-26 11:39
閱讀 936·2019-08-26 11:00