作用域与作用域链
- 作用域
- 类别
- 全局作用域
- 函数作用域
- 块作用域: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