亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

rose / 2046人閱讀

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

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

例1:

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

結(jié)果是什么?console.log(o1);這句簡單undefined,而console.log(o2);這句呢?答案是5,o2變成了全局變量了
這是實際執(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); 

很早以前的面試題目了,相信很多人知道答案,考點:詞法分析、執(zhí)行順序、運算符優(yōu)先級等
這是我理解的實際執(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 } 

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

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

遇到第一個"=",準備為x賦值

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

執(zhí)行foo = {n:2},并將該賦值表達式的結(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í)行語句前會將函數(shù)聲明和變量定義進行"預(yù)編譯",而這個"預(yù)編譯",并非一個頁面一個頁面地"預(yù)編譯",而是一段一段地預(yù)編譯,所謂的段就是一 個

閱讀需要支付1元查看
<