雖然執行環境的型別只有全域性函式和區域性函式,但還是有其他辦法來延長作用域的。實現的原理是有些一句可以在作用域的前端臨時加乙個變數物件,該變數物件會在**執行後被移除。
有兩種情況可以達到這種效果:
try-catch語句的catch塊
with語句
上面兩個語句都會在作用域的前端新增乙個變數物件。對with語句來說,會將指定的物件新增到作用域中;對catch語句來說,會建立乙個新的變數物件,其中包含的是被丟擲的錯誤物件的宣告。
具體按下面的案例:
function buildurl ()
return url;
}
在上面的例子中,with語句接收的是location物件,因此其變數物件就包含了location物件的所有屬性和方法,而這個變數物件被新增到了作用域的前端。buildurl函式中定義了乙個qs變數,當在with語句中引入變數href時,可以在當前執行環境的變數物件中找到。當引用變數qs時,引用的則是buildurl中定義的變數,而該變數位於函式環境的變數物件中。至於with語句內部,則定義了乙個名為url的變數,因而url就成了函式執行環節的乙個部分,所以可以作為函式的值被返回。
延長作用域的表現:通過分析上面的**,了解上面**所體現的作用域
原來的作用域是:
window全域性物件
buildurl變數物件
加入with之後的作用域是:
window全域性物件
buildurl變數物件
新增的location物件
還有一種可能,是可以使用eval,它將字串轉換為js**,若果字串中有新定義 函式,那麼它就有可能再建乙個執行環境。
js 延長作用域
延長作用域 1 with語句 function buildurl window person with語句可以延長js變數作用域,使用var 申名的變數會新增到最近接的環境 url被新增到buildurl函式環境就是與buildurl環境平級,而不是with語句塊環境 with window ret...
js 作用域鏈
作用域鏈 作用域鏈就是內部上下文的變數物件vo的列表,作用域鏈用來檢索上下文出現的識別符號,從而保證有序訪問所有變數和函式。乙個作用域鏈包括父級變數物件 variable object 作用域鏈的頂部 函式自身變數vo和活動物件 activation object 當查詢識別符號的時候,會從作用域鏈...
JS函式作用域延長的方法
當 在乙個環境中執行時,會建立變數物件的乙個 作用域鏈 scope chain 作用域鏈的用途,是保證對執行環境有權訪問的所有變數和函式的有序訪問。作用域鏈的前端,始終都是當前執行的 所在環境的變數物件。如果這個環境是函式,則將其 活動物件 activation object 作為變數物件。活動物件...