JavaScript 詞法環境
本文主要講解JS詞法環境,我們將看到什么是詞法環境,詞法范圍如何作業,函式內部的名稱如何決議,內部屬性,弄清楚詞法環境利于我們理解閉包,讓我們開始吧...
什么是詞法環境?
在理解閉包時,最大的混淆來源是術語“詞匯環境”,或者只是“詞匯”這個詞,在計算機科學中術語“詞匯”僅表示“源代碼”,或者換句話說,“與寫的代碼有關”,
大家請考慮以下代碼:
var a = 'static';
function f1() {
console.log(a);
}
function f2() {
var a = 'dynamic';
f1();
}
f2();
仔細考慮,大家覺得會輸出什么?正確答案是:static,
首先 JavaScript 編譯器讀取程式的源代碼,并在編譯時根據給定函式的定義確定其可訪問的環境,所以在 f1 被定義的時候它的詞法范圍就已經確定了,即它是全域定義的所以它的詞法范圍也為全域,無論在哪里呼叫,a 都是‘static’,
下一個例子:
var a = 'easy';
(function() {
var b = 'easy';
function f1() {
console.log(a, b);
}
function f2() {
var a = 'difficult';
var b = 'difficult';
f1();
}
f2();
})();
這段代碼大家覺得結果會是什么?正確答案:easy easy

說明:f1 的本地環境并沒有定義 a,b 因此搜索將移至詞匯環境,在詞匯環境中,搜索的第一個封倍訓境,即 IIFE(立即執行函式) 的區域環境,存在 b;繼續訪問外部范圍獲取到全域的 a,故 f1 的輸出結果為 easy easy,
最后:請始終記住函式定義的時候詞法范圍就決定了,與其在哪里呼叫無關,將在下一篇文章講解JS中的閉包,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/543459.html
標籤:其他
上一篇:Vue 的優化技巧
