摘要:作用域引擎的另一位朋友,負(fù)責(zé)收集并維護(hù)所有生命的標(biāo)識(shí)符組成的一系列查詢,并實(shí)施一套非常嚴(yán)格的查詢,確定當(dāng)前執(zhí)行的代碼對(duì)這些標(biāo)識(shí)符的訪問權(quán)限。三分工合作編譯器遇到,編譯器會(huì)詢問作用域是否有一個(gè)該名稱的變量存在同一個(gè)作用域。
今天就簡單記錄下 var a = 2的時(shí)候發(fā)生了什么呢?
一、人物關(guān)系1、引擎
從頭到尾負(fù)責(zé)整個(gè)JavaScript程序的編譯及執(zhí)行過程。
2、編譯器
引擎的好朋友,負(fù)責(zé)語法分析及代碼生成等臟活累活。
二、對(duì)話3、作用域
引擎的另一位朋友,負(fù)責(zé)收集并維護(hù)所有生命的標(biāo)識(shí)符組成的一系列查詢,并實(shí)施一套非常嚴(yán)格的查詢,確定當(dāng)前執(zhí)行的代碼對(duì)這些標(biāo)識(shí)符的訪問權(quán)限。
當(dāng)我們看到var a = 2;的時(shí)候,就會(huì)覺得這是一個(gè)聲明而已。
但我們的朋友們卻不這么認(rèn)為,引擎認(rèn)為這里有兩個(gè)聲明,一個(gè)是編譯器編譯的時(shí)候處理的,一個(gè)是引擎運(yùn)行處理的。
三、分工合作1、編譯器遇到 var a,編譯器會(huì)詢問作用域是否有一個(gè)該名稱的變量存在同一個(gè)作用域。如果是,編譯器就會(huì)忽略該聲明,繼續(xù)進(jìn)行編譯;否則它會(huì)要求作用域在當(dāng)前域聲明一個(gè)新的變量,并命名為a;
2、接下來編譯器會(huì)為引擎生成運(yùn)行時(shí)所需要的代碼,這些代碼被用來處理 a = 2這個(gè)賦值操作。引擎運(yùn)行時(shí)首先會(huì)詢問作用域,當(dāng)前作用域是否存在 a變量,如果是,引擎就會(huì)使用這個(gè)變量。如果否,引擎就會(huì)繼續(xù)查找該變量(通過作用域鏈)。
如果最終引擎找到了變量,就會(huì)將2賦值給他。否則引擎就會(huì)拋出一個(gè)異常,你這個(gè)找不到的啦!
本文是《你不知道的JavaScript》的學(xué)習(xí)筆記,文中舉例非本人原創(chuàng)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84774.html
摘要:一前言這個(gè)周末,注意力都在學(xué)習(xí)基礎(chǔ)知識(shí)上面,剛好看到了閉包這個(gè)神圣的東西,所以打算把這兩天學(xué)到的總結(jié)下來,算是鞏固自己所學(xué)。因此要注意閉包的使用,否則會(huì)導(dǎo)致性能問題。五總結(jié)閉包的作用能夠讀取其他函數(shù)內(nèi)部變量。 # 一、前言 這個(gè)周末,注意力都在學(xué)習(xí)基礎(chǔ)Js知識(shí)上面,剛好看到了閉包這個(gè)神圣的東西,所以打算把這兩天學(xué)到的總結(jié)下來,算是鞏固自己所學(xué)。也可能有些不正確的地方,也請(qǐng)大家看到了,麻...
摘要:函數(shù)的作用域也可被分為全局作用域和局部作用域函數(shù)作用域被定義在指定函數(shù)內(nèi)部的函數(shù)被稱為局部函數(shù)或內(nèi)部函數(shù)。局部變量在函數(shù)內(nèi)部聲明的變量被成為局部變量,它只能在函數(shù)的內(nèi)部進(jìn)行訪問。 作用域 概述 變量和函數(shù)都具有作用域 作用域就是變量和函數(shù)的可被訪問的范圍 控制著變量和函數(shù)的可見性和生命周期。變量的作用域可被分為全局作用域和局部作用域(函數(shù)作用域) 如果變量是被定義在全局作用域的話 在J...
摘要:考慮到環(huán)境導(dǎo)致的行為差異太大,應(yīng)該避免在塊級(jí)作用域內(nèi)聲明函數(shù)。函數(shù)聲明語句函數(shù)表達(dá)式循環(huán)循環(huán)還有一個(gè)特別之處,就是循環(huán)語句部分是一個(gè)父作用域,而循環(huán)體內(nèi)部是一個(gè)單獨(dú)的子作用域。聲明一個(gè)只讀的常量。 es6學(xué)習(xí)筆記-let,const和塊級(jí)作用域_v1.0 塊級(jí)作用域 javascript 原來是沒有塊級(jí)作用域的,只有全局作用域和函數(shù)作用域 例子1 因?yàn)闆]有塊級(jí)作用域,所以每次的i都是一...
摘要:一新增了命令和一樣都是用來聲明標(biāo)量,但所聲明的變量只在聲明的代碼塊內(nèi)及聲明之后有效命令適合在循環(huán)中使用在循環(huán)內(nèi)有效在全局內(nèi)有效命令暫時(shí)性死區(qū)大括號(hào)中的使用了聲明,所以在大括號(hào)中暫時(shí)只能在聲明之后有效不允許在同一作用域內(nèi)重復(fù)聲明變量,因此不能 一、ES6新增了let命令 let 和 var 一樣都是用來聲明標(biāo)量,但let所聲明的變量只在【聲明的代碼塊內(nèi)】及【聲明之后】有效 { c...
摘要:什么是閉包定義我所理解的閉包就是,即使外部函數(shù)已經(jīng)運(yùn)行完畢,內(nèi)部函數(shù)仍能訪問外部函數(shù)的作用域中的變量。閉包的應(yīng)用場景私有變量模塊需求只能通過函數(shù)提供的方法訪問函數(shù)內(nèi)部的變量隱藏。為什么閉包很重要參考資料征服面試什么是閉包 1. 什么是閉包 MDN定義:Closures are functions that refer to independent (free) variables (v...
閱讀 2591·2021-11-18 10:02
閱讀 1724·2021-09-30 10:00
閱讀 5357·2021-09-22 15:27
閱讀 1226·2019-08-30 15:54
閱讀 3685·2019-08-29 11:13
閱讀 2962·2019-08-29 11:05
閱讀 3340·2019-08-29 11:01
閱讀 584·2019-08-26 13:52