當(dāng)前位置:
首頁 >
函数的作用域以及预编译
發(fā)布時(shí)間:2025/3/12
21
豆豆
生活随笔
收集整理的這篇文章主要介紹了
函数的作用域以及预编译
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、函數(shù)的作用域
- 函數(shù)作用域有點(diǎn)像單面鏡(外面看不到里面,里面可以看到外面)
- JS的特點(diǎn):單線程、是 解釋性語言 (翻譯一行,執(zhí)行一行)
二、預(yù)解析
JS預(yù)解析三部曲:語法解析 ? 預(yù)編譯 ? 解釋執(zhí)行
JS 在執(zhí)行之前會(huì)通篇掃描代碼,看有沒有語法語義錯(cuò)誤(語法解析),如果沒有,然后開始執(zhí)行代碼(預(yù)編譯)
- 通篇掃描 --> 語法分析
- 通篇掃描之后開始執(zhí)行 --> 預(yù)解析
三、變量和函數(shù)的提升
預(yù)編譯四部曲
預(yù)編譯練習(xí) – 提升的意思就是被優(yōu)先執(zhí)行了
function fn(a) {console.log(a); // function a() {}var a = 123;console.log(a); // 123function a() {}console.log(a); // 123var b = function () {}console.log(b); // function() {}function d() {} }// 預(yù)編譯發(fā)生在函數(shù)執(zhí)行的前一刻 fn(1);/*1. 創(chuàng)建AO對(duì)象 (Activation Object) 2. 用形參和變量聲明的名,作為AO對(duì)象的屬性名,值統(tǒng)一為 undfiendAO {a : undefined,b : undefined}3. 把形參和實(shí)參的值統(tǒng)一AO {a : 1,b : undefined}4. 在函數(shù)體里面找函數(shù)聲明,賦予函數(shù)體AO {a : function a() {}, // 只有函數(shù)聲明會(huì)提升,函數(shù)表達(dá)式不會(huì)提升b : undefined,d : function d() {}}5. 函數(shù)執(zhí)行AO {a : 123,b : function() {},d : function d() {}} */在全局下會(huì)生成一個(gè)GO對(duì)象(Global Object)
function test() {var a = b = 123;console.log(a);console.log(window.b); // 123console.log(window.a); // undefined } test();/*GO: {b: 123;}AO: {a: undefined} */函數(shù)聲明整體提升 變量聲明提升
a = 100; function demo(e) {function e() {}arguments[0] = 2;console.log(e); // 2if (a) { // a 是 undefined 所以這里 if 不會(huì)執(zhí)行var b = 123;function c() {// 豬都能做出來}}var c;a = 10;var a;console.log(b); // undefinedf = 123;console.log(c); // undefinedconsole.log(a); // 10 } var a; demo(1); console.log(a); // 100 console.log(f); // 123/*GO {a: 100f: 123function demo() {}}AO {c: undefineda: 10e: 2} */總結(jié)
以上是生活随笔為你收集整理的函数的作用域以及预编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle内存表与临时表,Oracle
- 下一篇: ST_Curve --- 一个专业的曲线