js詞法作用域

2022-03-17 05:41:10 字數 1037 閱讀 3535

通常來說,一段程式**中所用到的名字並不總是有效/可用的,而限定這個名字的可用性的**範圍就是這個名字的作用域.

作用域的使用提高了程式邏輯的區域性性,增強程式的可靠性,減少名字衝突

考慮如下情況:

var name = "chromium";

function init()

displayname();

}init(); // 彈出mozilla

以及

var name = "chromium";

function init()

return displayname;

}init()(); // 彈出mozilla

我們可以看出這兩段**中 displayname 函式內部並沒有定義區域性變數,函式內部訪問的變數是從作用域鏈上取值,作用域鏈是這樣的: global scope => init function scope => display function scope,從作用域鏈上取值最明顯的特點就是"就近原則",

mozilla 離得近,所以取值就是 mozilla

動態作用域不關心它本身是怎樣在**宣告的,只關心它在**呼叫的,動態作用域的域鏈基於呼叫棧,而不是**中的巢狀關係.動態域的函式中遇到既不是形參也不是函式內部定義的區域性變數的變數時,到函式呼叫時的環境中查.

如果處於動態作用域中,下面**執行輸出就是 chromium

var name = "chromium";

function init()

return displayname;

}init()(); // chromium

首先 init()呼叫,獲取 displayname,然後執行 displayname(),這個時候 dispalyname 是在全域性作用域中執行的,內部的 name 變數會在呼叫的環境中去找,全域性作用域下的 name 就是 chromium.

js作用域和詞法分析

都知道js中不存在類似於c 等語言的塊級作用域,例如for迴圈中定義的變數,其實是屬於當前物件下的屬性,同一物件下可以隨便訪問。只有函式可以限定乙個變數的作用範圍,即函式才是變數的作用域。對於函式的變數訪問時遵循作用域鏈的,即當前函式執行時會有乙個當前作用域,當飲用某個變數時,會先查詢當前作用域內是...

詞法作用域

域表示的就是 範圍,即 作用範圍.就是乙個名字在什麼地方可以被使用,什麼時候不能使用.所謂的 詞法 作用域,就是 在編寫過程中體現出來的作用範圍.一旦寫好,不用執行,作用範圍就已經確定好了.這個就是所謂詞法作用域.這意味著函式執行在定義它的作用域中,而不是在呼叫它的作用域中。在 js 中詞法作用域規...

JS修改詞法作用域的方法

三者的相似點 1 都是用來改變函式的this物件的指向的。應用形式 將func的this指向從a更改為b,使b能通過此種方式呼叫func方法,但b物件並沒有繼承a中的func a.func.call b,arg1,arg2,arg3.a.func.bind b,arg1,arg2,arg3.call...