日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

深入了解JavaScript詞法作用域

瀏覽:206日期:2023-10-19 14:04:50

JavaScript并不是傳統(tǒng)的塊級作用域,而是函數(shù)作用域!

一、作用域

JavaScript引擎在代碼執(zhí)行前會對其進(jìn)行編譯,在這個過程中,像var a = 2 這樣的聲明會被分解成兩個獨(dú)立的步驟:

第一步(編譯階段):var a 在其作用域中聲明新變量。這會在最開始的階段,也就是代碼執(zhí)行前進(jìn)行。第二步(運(yùn)行階段):a = 2 會查詢變量a(LHS查詢)并對其進(jìn)行賦值。

LHS & RHS(當(dāng)前作用域->上級作用域->...->全局作用域)

LHS(左側(cè)):試圖找到變量的容器本身RHS(右側(cè)):查找某個變量的值

示例:

function foo(a){var b = a;return a + b;}var c = foo(2);// LHS(3處):c;a(隱式變量分配);b;// RHS(4處):foo(2);=a;a;b; 異常

function foo(a){console.log(a + b);b = a;}foo(2);

(1)在ES5“嚴(yán)格模式”下,LHS拋出ReferenceError;“非嚴(yán)格模式”下,LHS會自動隱式的創(chuàng)建一個全局變量。

(2)RHS查詢在所有嵌套的作用域中遍尋不到所需遍歷會拋出ReferenceError。

(3)RHS查詢到一個變量,但你嘗試對其不合理的操作(引用null或undefined類型中的屬性),會拋出TypeError。

一句話概括之:ReferenceError同作用域判別失敗相關(guān);而TypeError則代表作用域判別成功了,但是對結(jié)果的操作是非法或不合理的。

PS:從原理上闡述了博客中《JavaScript函數(shù)及其prototype》函數(shù)執(zhí)行覆蓋等問題?。?!

二、詞法作用域

詞法作用域意味著作用域是由書寫代碼時函數(shù)聲明的位置來決定的。JavaScript中有兩個機(jī)制可以“欺騙”詞法作用域:eval(...)和with。

eval

eval函數(shù)可以接受一個字符串參數(shù),并將其中的內(nèi)容視為好像在書寫時存在于程序中這個位置的代碼(在當(dāng)前位置,可生成代碼,并運(yùn)行)。eval可以對一段包含一個或多個聲明的“代碼”字符串進(jìn)行演算,并借此修改已經(jīng)存在的詞法作用域(運(yùn)行階段)。

function foo(str,a){eval(str);console.log(a, b);//1 , 3console.log(a, window.b);//1 , 2}var b = 2;foo('var b = 3;', 1);

解釋:上述全局變量b被覆蓋了,由于b是全局的,可以window.b獲取到;但非全局的變量如果被覆蓋,就無法訪問到了!嚴(yán)格模式下:

function foo(str,a){'use strict';eval(str);console.log(a, b);//1 , 2console.log(a, window.b);//1 , 2}var b = 2;foo('var b = 3;', 1); with

with通常被當(dāng)作重復(fù)引用一個對象中的多個屬性的快捷方式,可以不需要重復(fù)引用對象本身。with將對象的屬性當(dāng)作作用域中的標(biāo)識符來處理,從而創(chuàng)建了一個新的詞法作用域(運(yùn)行階段)。

function foo(obj){with(obj){a = 2;}}var o1 = { a : 3 };var o2 = { b : 3 };foo(o1);console.log( o1.a );// 2foo(o2);console.log( o2.a );// undefinedconsole.log( a );// 2,表明a泄漏到全局作用域上了!

這兩個機(jī)制的副作用是引擎無法在編譯時對作用域查找進(jìn)行優(yōu)化,導(dǎo)致代碼運(yùn)行速度變慢,建議不要使用它們!

PS:從原理上闡述了博客《 JavaScript語言精粹【糟粕、毒瘤】》中with不能使用的原因?。。?/p>

三、函數(shù)作用域和塊作用域

匿名和具名

/* 匿名(引用自身只能用過期的arguments.callee引用) */setTimeout(function(){console.log('i wait 1 second!')},1000);/* 具名(可讀性好) */setTimeout(function timeoutHandler(){console.log('i wait 1 seco nd!')},1000);

立即執(zhí)行函數(shù)表達(dá)式

/* IIFE模式 */var a = 2;(function IIFE(global){var a = 3;console.log(a);//3console.log(global.a);//2})(window);/* UMD模式 */var b = 2;(function UMD(def){def(window);})(function tmpF(global){var b = 3;console.log(b);//3console.log(global.b);//2});

塊作用域

try/catch會創(chuàng)建一個塊作用域

try{undefined();}catch(err){console.log(err);//可以正常使用}console.log(err);//ReferenceError: err is not defined/* 坑1 */for(var i=0;i<10;i++){}console.log(i);//10/* 坑2 */{console.log(bar);//undefined 不會報錯??!var bar = 2;}

ES6中引入新的let關(guān)鍵字?。?/p>

/* 填坑1 */for(let i=0;i<10;i++){}console.log(i);//SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode/* 填坑2 */{console.log(bar);//SyntaxError 報錯!!let bar = 2;}

推薦兩個將ES6代碼轉(zhuǎn)化成兼容ES6之前的環(huán)境(大部分是ES5,但不全是)工具:Traceur和let-er

以上就是深入了解JavaScript詞法作用域的詳細(xì)內(nèi)容,更多關(guān)于JavaScript詞法作用域的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲乱码一区| 亚洲一区国产| 日韩黄色av| 亚洲一区二区免费在线观看| 国产日韩专区| 丝袜美腿高跟呻吟高潮一区| 三级在线观看一区二区| 亚洲一区二区小说| 在线观看亚洲精品福利片| 中文字幕av一区二区三区人| 天堂va欧美ⅴa亚洲va一国产| 日韩黄色av| 久久免费福利| sm久久捆绑调教精品一区| 色婷婷色综合| 国产成人精品三级高清久久91| 国产精品99视频| 亚洲成人不卡| 伊人影院久久| 日韩视频1区| 国产精品免费精品自在线观看| 国产极品嫩模在线观看91精品| 国产成人精品亚洲线观看| 精品欧美久久| 色8久久久久| 捆绑调教美女网站视频一区| 日韩在线高清| 亚洲中午字幕| 国产欧美88| 日本欧美国产| 91精品xxx在线观看| 五月天久久久| 日韩精品一区二区三区中文| 麻豆一区二区三区| 久久精品主播| 亚洲专区视频| 精品免费av一区二区三区| 性欧美xxxx免费岛国不卡电影| 欧美日韩四区| 国产伦精品一区二区三区千人斩 | 999久久久精品国产| 精品欧美久久| 国产精品一区毛片| 欧美日韩水蜜桃| 日韩精品久久理论片| 国产在线观看91一区二区三区| 欧美亚洲精品在线| 国产日韩欧美一区| 亚洲福利一区| 91精品丝袜国产高跟在线| 日韩欧美一区二区三区在线观看| 蜜桃av一区二区在线观看| 久久久久久亚洲精品美女| 亚洲精品888| 国产精品调教视频| 91久久午夜| 奇米狠狠一区二区三区| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 日韩国产精品久久久| 国产成人久久精品麻豆二区| 中文字幕成人| 99精品电影| 国产精品资源| 日韩午夜av在线| 久久影院一区二区三区| 免费看日韩精品| 首页国产精品| 日韩av中文字幕一区| 欧美日韩在线观看视频小说| 国产精品二区影院| 免播放器亚洲| 青青青免费在线视频| 亚洲久草在线| 亚洲一级影院| 成人国产综合| 欧美日韩1区2区3区| 亚洲国产不卡| 日韩精品专区| 国产欧美大片| 中文字幕日韩欧美精品高清在线| 久久久久.com| 精品免费在线| 国产精品日本一区二区不卡视频| 午夜在线精品偷拍| 91精品国产自产在线观看永久∴| 国产精品亚洲人成在99www| 老司机精品久久| 欧美国产美女| 国产精品探花在线观看| 在线看片日韩| 老鸭窝毛片一区二区三区| 久久裸体视频| 精品欧美日韩精品| 国产精品99精品一区二区三区∴ | 2023国产精品久久久精品双| 精品国产黄a∨片高清在线| 五月激激激综合网色播| 亚洲欧洲一区二区天堂久久| 日韩精品看片| www.九色在线| 国产一区二区三区免费在线| 国产精品一级在线观看| 日本午夜精品久久久| 深夜日韩欧美| 久久国产88| 中文亚洲欧美| 午夜精品一区二区三区国产| 亚洲二区视频| 99久久亚洲精品| 日韩在线观看| 日韩中文首页| 欧美xxxx中国| 国产一区三区在线播放| 久久男人av| 老司机精品视频网| 激情综合婷婷| 狠狠躁少妇一区二区三区| 风间由美中文字幕在线看视频国产欧美| 欧美日韩亚洲一区| 欧美亚洲tv| 国产精品亚洲四区在线观看 | 麻豆免费精品视频| 精品国产精品久久一区免费式| 老司机精品在线| 国产精品99久久久久久董美香| 里番精品3d一二三区| 美女视频黄久久| 美女视频黄久久| 九九九精品视频| 麻豆mv在线观看| 亚洲精品一级二级| 久久精品亚洲人成影院| 欧美日韩一区二区三区视频播放| 国产精品91一区二区三区| 日韩一级网站| 日韩中文字幕亚洲一区二区va在线 | 国产精品久久| 国产精品欧美日韩一区| 欧美激情三区| jizzjizz中国精品麻豆| 亚洲视频综合| 免费黄网站欧美| 日韩三级一区| 久久精品国产网站| 成人羞羞视频在线看网址| 婷婷激情图片久久| 亚洲丝袜美腿一区| 久久精品99国产国产精| 国产精品久av福利在线观看| 黄毛片在线观看| 国产亚洲精品v| 日韩精品欧美大片| 精品欧美日韩精品| 欧美高清不卡| 午夜性色一区二区三区免费视频| 国产精品17p| 久久久国产亚洲精品| 99视频精品| 日韩激情网站| 高潮久久久久久久久久久久久久| 婷婷成人基地| 久久精品72免费观看| 久久免费福利| 婷婷丁香综合| 久久国产精品色av免费看| 国产中文欧美日韩在线| 亚洲黄页一区| 欧美成人aaa| 图片区亚洲欧美小说区| 91精品丝袜国产高跟在线| 精品国产第一福利网站| 国产精品三上| 国产极品一区| 伊人影院久久| 欧美黄页在线免费观看| 欧美 日韩 国产精品免费观看| 日韩久久99| 欧美13videosex性极品| 99香蕉国产精品偷在线观看| 国产乱码精品一区二区三区四区 | 久久精品五月| 亚洲欧美日韩视频二区| 麻豆国产欧美一区二区三区| 亚洲精品888| 久久精品亚洲| 免费在线观看精品| 国产一区二区三区久久久久久久久| 激情婷婷欧美| 国产精品免费大片| 在线视频免费在线观看一区二区| 国产欧美日韩视频在线| 婷婷色综合网| 欧美激情三区| 亚洲一区二区小说| 日韩欧美另类一区二区| 日本高清久久| 合欧美一区二区三区| 成人午夜网址| 国产亚洲久久| 久久高清免费观看|