狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Javascript中的“域”、“預”、“譯”,你真的掌握了嗎?

freeflydom
2024年5月29日 10:21 本文熱度 907

一、作用域的概念

1、作用域有三種:全局作用域、函數作用域、塊級作用域。(模塊作用域)

(1)全局作用域:這時最高級別的作用域,在這定義的函數以及變量可以在代碼的所有地方被訪問。在瀏覽器的環境中,全局變量實際是window對象的屬性。例如:

var a = 123 

function foo(){}

//在全局中定義了變量a 函數foo()


(2)函數作用域(局部作用域):在每個函數內部聲明的變量(未使用const、let關鍵字)、function聲明的函數,這些對象具有局部作用域,它們只可以在函數內部訪問。例如:

function foo(){

    var a;

    function add(){}

}


(3)塊級作用域:這個作用域是在ES6引入了let和const關鍵字,避免因var聲明的變量的變量提升(接下來會進行解釋)現象,導致的讓人匪夷所思的行為。這個作用域可以簡單的理解為:{} + let/const例如:

if(...){

    let a = 6;

    const b = 6

}

while(...){

    let a = 6;

    const b =6

}

for(){

    let a = 6;

    const b =6;

}

function foo(){

    let a = 6;

    const b =6;

}


注:(1) 以上作用域所指的是全局、函數體、塊的域,而詞法作用域則是變量聲明的地方,注意不是調用的地方。例如:我們的寢室是一個域,則該域的詞法作用域就是這一棟寢室樓。

(2)欺騙詞法作用域:

eval:可以讓原本不屬于這里的代碼,變得好像天生被定義了在這一樣。

 function foo(a,str){

    eval(str) //相當于var b = 2;

    console.log(a,b)

}

foo(1,'var b = 2')


whit(){} 當修改對象中不存在的屬性時,這個屬性會被定義在全局,變為全局變量,造成數據泄露。

function foo(obj){

    with(obj){

        a = 2

    }

}

var o2= {

    b :1

}

foo(o2)

console.log(a) //輸出a = 2,此時的a為全局變量


2、聲明提升的概念與示例

概念:在變量聲明和函數聲明在代碼執行前被提升,或者說移到,其包含的作用域的頂部的過程,發生在JS的編譯階段,導致了變量和函數可以在被聲明之前就被訪問。

console.log(a); //變量a只是聲明被提示,輸出undefined

var a = 6;


//編譯器會將代碼整理為

//var a;

//console.log(a);

//a = 6;


即使函數foo()在調用之后聲明,但由于聲明提升,他在執行開始時,就可以使用了,因此能正常輸出。

foo();

function foo(){

    console.log('你好')

}


二、“預備與編譯”--預編譯的概念

1、預編譯發生在代碼被執行之前,是JS引擎對代碼的預處理,保證了變量和函數在使用之前已經被正確的設置。

2、全局預編譯:

(1)創建全局執行上下文GO(Global Object)。

(2)尋找變量聲明,變量名作為GO的屬性名,值為undefined。

(3)在全局找函數聲明,函數名作為GO的屬性名,值為函數體

畫圖實例:

 

3、函數中的預編譯

(1)創建函數的執行上下文對象AO(Activation Object)。

(2)找到形參和變量聲明,將形參和變量聲明作為AO的屬性名,值為undefined。

(3)將實參和形參統一

(4)在函數體內找到函數聲明,將函數名作為AO的屬性名,值為函數體。

畫圖實例:

注: 以上的執行上下文是被放在一個棧內,AO對象被放在變量環境中。在執行上下文中除了變量環境外,還有一個詞法環境,用于let const 聲明的變量的存儲,這保證了它們可以遵守塊級作用域的規則,處于臨時死區,直到聲明被執行才可被訪問。這個棧叫做調用棧。

畫圖實例:


作者:Sane
鏈接:https://juejin.cn/post/7372577541112561676
來源:稀土掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。



該文章在 2024/5/29 10:44:20 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved