深入理解js系列一作用域是什么
生活随笔
收集整理的這篇文章主要介紹了
深入理解js系列一作用域是什么
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
title: 深入理解js系列一作用域是什么? date: 2018-02-06 02:15:59 tags:
- 深入理解js系列
- 作用域 categories: JavaScript
作用域是什么?
變量的作用域到底是如何在js中工作的?
js是解釋型語言而無法編譯嗎?
什么是詞法作用域?
RHS查詢與LHS查詢?
理解作用域
js中的作用域可以理解為一套定義的規則,用來管理js引擎根據標識符名稱進行變量查找,并確定當前執行代碼對這些變量的訪問權限。
編譯原理
要想深入理解js的作用域,我們必須得先知道js事實上是一門編譯型語言(動態編譯)-- js引擎實際上是動態編譯程序然后立即執行。與傳統編譯語言在構建前編譯不同的是:js的編譯發生在代碼執行前(有時是執行中)的很短時間內,而且編譯完通常就會馬上執行它。另外,對比傳統編譯,js引擎在語法分析和代碼生成階段有特定的步驟對運行性能進行優化。這也是后面會談到的eval()和with() 影響運行效率的原因。
編譯的三個步驟
我們先來看看在傳統編譯語言中,一段源程序在執行前通常要經歷的三個步驟,js作為一門動態編譯語言,同樣也會經歷這些步驟:
在js中,js引擎負責整個js程序的編譯和執行過程,編譯器負責語法分析以及代碼生成。
js引擎做了什么?
當遇到var a = 2這段程序,js引擎做了什么?
可以看出,變量的賦值操作會執行兩個動作:
一個由編譯器在編譯時處理,另一個由引擎在運行時處理。
RHS查詢與LHS查詢?
LHS查詢:查找變量的容器本身(a=1) RHS查詢: 查找變量的值(console.log(a))
function foo(a){console.log(a) } foo(2) //RHS查詢 // 將2作為參數傳給foo函數,給參數a隱式地分配值時進行了一次LHS查詢 復制代碼作用域嵌套
異常
在作用域中找不到變量
在作用域中找變量
總結:
不成功的RHS引用拋ReferenceError
總結
以上是生活随笔為你收集整理的深入理解js系列一作用域是什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数组之冒泡排序、选择排序
- 下一篇: 十一、Shell 文件包含