深入理解javascript原型和闭包(9)——简述【执行上下文】下 - youngperson/study-100 GitHub Wiki
全局环境下的代码段中,执行上下文环境中有如下数据:
变量、函数表达式——变量声明,默认赋值为undefined;
this——赋值;
函数声明——赋值;
function fn(x){
console.log(arguments)
console.log(x)
}
fn(100)
fn(200)
arguments变量和函数的参数都已经被赋值。从这里可以看出,函数每被调用一次,都会产生一个新的执行上下文环境。因为不同的调用可能就会有不同的参数。
函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域
var a = 10;
function fn(){
console.log(a)
}
function bar(f){
var a = 20;
f();
}
bar(fn())
全局代码的上下文环境数据内容为:
| 普通变量(包括函数表达式),如: var a = 10; | 声明(默认赋值为undefined) |
|---|---|
| 函数声明,如: function fn() { } | 赋值 |
| this | 赋值 |
如果代码段是函数体,那么在此基础上需要附加:
| 参数 | 赋值 |
|---|---|
| arguments | 赋值 |
| 自由变量的取值作用域 | 赋值 |
在执行代码之前,把将要用到的所有的变量都事先拿出来,有的直接赋值了,有的先用undefined占个空。