作用域與作用域鏈
- 作用域
- 類別
- 全局作用域
- 函數作用域
- 塊作用域:Es6時出現,之前沒有
- 類別
- 作用域與執行上下文
- 區別
- 創建時機不同
- 全局作用域外,每個函數都有自己的作用域,作用域在函數創建時就創建了,而不是在調用時
- 全局執行上下文環境是在全局作用域創建之后,js代碼執行之前創建的
- 函數執行上下文是在函數調用時,函數執行前創建的
- 狀態不同
- 作用域是靜態的,只要函數創建了就一直存在,且不變化
- 執行上下文是動態的,函數調用時創建,調用完釋放
- 創建時機不同
- 聯系
- 上下文對象從屬于所在的作用域
- 區別
var fu = function(){console.log(fu)}fu()var obj = {fu2 : function(){console.log(fu2)}}
obj.fu2() //05.js:44 Uncaught ReferenceError: fu2 is not defined/*** 函數作用域在函數創建時就確定了,并且不會改變,* 在show中調用fn,fn與show的作用域也是相互隔絕的*/var x = 10
function fn(x){console.log(x)
}
function show(f){var x = 20f()
}
show(fn) // 10