JavaScript深刻之詞法做用域和動態做用域

最後,讓咱們看一個《JavaScript權威指南》中的例子:bash

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();複製代碼
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}
checkscope()();複製代碼

猜猜兩段代碼各自的執行結果是多少?函數

這裏直接告訴你們結果,兩段代碼都會打印:local scopeui

緣由也很簡單,由於JavaScript採用的是詞法做用域,函數的做用域基於函數建立的位置。spa

而引用《JavaScript權威指南》的回答就是:code

JavaScript 函數的執行用到了做用域鏈,這個做用域鏈是在函數定義的時候建立的。嵌套的函數 f() 定義在這個做用域鏈裏,其中的變量 scope 必定是局部變量,無論什麼時候何地執行函數 f(),這種綁定在執行 f() 時依然有效。ip

可是在這裏真正想讓你們思考的是:作用域

雖然兩段代碼執行的結果同樣,可是兩段代碼究竟有哪些不一樣呢?string

若是要回答這個問題,就要牽涉到不少的內容,詞法做用域只是其中的一小部分,讓咱們期待下一篇文章————《JavaScript深刻之執行上下文棧》。it

相關文章
相關標籤/搜索