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