最後,讓咱們看一個《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 scope
。ui
緣由也很簡單,由於JavaScript採用的是詞法做用域,函數的做用域基於函數建立的位置。spa
而引用《JavaScript權威指南》的回答就是:code
JavaScript 函數的執行用到了做用域鏈,這個做用域鏈是在函數定義的時候建立的。嵌套的函數 f() 定義在這個做用域鏈裏,其中的變量 scope 必定是局部變量,無論什麼時候何地執行函數 f(),這種綁定在執行 f() 時依然有效。ip
可是在這裏真正想讓你們思考的是:作用域
雖然兩段代碼執行的結果同樣,可是兩段代碼究竟有哪些不一樣呢?string
若是要回答這個問題,就要牽涉到不少的內容,詞法做用域只是其中的一小部分,讓咱們期待下一篇文章————《JavaScript深刻之執行上下文棧》。it