定义:
上下文(content):函数被调用的时候, 查看this指向哪个object, 那么那个object 就是当前的 "上下文"。
作用域(scope):函数被调用的时候, 各个变量的作用区域。
js执行有两个阶段:
(1)预“编译”阶段(一定要注意,这个编译,不是编译成机器码的编译):
- 浏览器的JavaScript引擎“解析”JavaScript代码。
- 建立arguments对象(隐藏对象,不可见),函数,参数,变量
- 建立作用域链
- 确定this的值(或者说指向)
(2)代码执行阶段
浏览器的JavaScript引擎一步步执行代码段,从上至下。
给变量赋值,确定函数的引用。
实例论证:
1 function fn(a){
2 var a = 1;
3 function a(){
4 console.log("a函数")
5 }
6 alert(a)
7 }
8 fn(2)
实际实现代码:
1 function fn(a){
2 var a = undefined;
3 a = 2;
4 a = function a(){
5 console.log("a函数")
6 }
7 a = 1;
8 alert(a); // 1
9 }
10 fn(2)
构建执行环境作用域时,arguments对象(隐藏对象,不可见),函数,参数,变量的声明与构建有先后顺序。
arguments对象(隐藏对象,不可见)—>函数—>参数—>变量
看过我js底层原理一的同学就会发现,这其实就是变量,函数提升的另一个解释而已。
网友评论