成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從連續(xù)賦值到:詞法分析、函數(shù)執(zhí)行原理

rose / 1997人閱讀

摘要:先說下這個(gè)老話題連續(xù)賦值例結(jié)果是什么這句簡(jiǎn)單,而這句呢答案是,變成了全局變量了這是實(shí)際執(zhí)行順序未使用聲明,所以變?nèi)肿兞苛死茉缫郧暗拿嬖囶}目了,相信很多人知道答案,考點(diǎn)詞法分析執(zhí)行順序運(yùn)算符優(yōu)先級(jí)等這是我理解的實(shí)際執(zhí)行順序我是這么猜想的自

先說下這個(gè)老話題:連續(xù)賦值

例1:

function a(){ 
    var o1 = o2 = 5; 
} 
a(); 
console.log(o1); 
console.log(o2); 

結(jié)果是什么?console.log(o1);這句簡(jiǎn)單undefined,而console.log(o2);這句呢?答案是5,o2變成了全局變量了
這是實(shí)際執(zhí)行順序:

var o1; 
o2 = 5; //o2未使用var聲明,所以變?nèi)肿兞苛?
o1 = o2;

例2:

var foo = {n:1}; 
var bar = foo; 
foo.x = foo = {n:2}; 
console.log(foo.x); 
console.log(bar.x); 

很早以前的面試題目了,相信很多人知道答案,考點(diǎn):詞法分析、執(zhí)行順序、運(yùn)算符優(yōu)先級(jí)等
這是我理解的實(shí)際執(zhí)行順序:

var foo; 
var bar; 
foo = {n:1}; 
bar = foo; //bar = {n:1} 
foo.x = undefined; // 
foo.x = (foo = {n:2}); 
console.log(foo.x); //undefined 
console.log(bar.x); //{ n: 2 } 

我是這么猜想的:自我感覺勉強(qiáng)說的通,有不對(duì)的地方請(qǐng)指出!
JS引擎遇到foo.x = foo = {n:2}; 詞法分析為foo.x, =, foo, =, {n:2}
執(zhí)行順序:

先為foo添加x屬性,未賦值(undefined),這里的foo還是{n:1}

遇到第一個(gè)"=",準(zhǔn)備為x賦值

"="優(yōu)先級(jí)最低,先計(jì)算右邊表達(dá)式的值

執(zhí)行foo = {n:2},并將該賦值表達(dá)式的結(jié)果值{n:2}賦值給之前的foo.x

最終foo的引用指向了{n:2},不存在屬性x
而bar的引用沒變,始終指向原來的{n:1},而{n:1}被添加了x屬性{n:2}變?yōu)?b>{n:1,x:{n:2}},這就是最后bar引用的值

下面給大家介紹下JS的詞法分析
以下內(nèi)容參考:《javascript權(quán)威指南》《你不知道的javascript》

JS 解析器在執(zhí)行語(yǔ)句前會(huì)將函數(shù)聲明和變量定義進(jìn)行"預(yù)編譯",而這個(gè)"預(yù)編譯",并非一個(gè)頁(yè)面一個(gè)頁(yè)面地"預(yù)編譯",而是一段一段地預(yù)編譯,所謂的段就是一 個(gè)

閱讀需要支付1元查看
<