函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域
在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。
因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境。
自由变量的取值是要到创建这个函数的那个作用域中取值,而不是到父作用域中取值
var a=10;
function fn(){
console.log(a);
}
function fn2(fn){
var a=20;
fn();
}
fn2(fn);//10
var a=10;
function fn(){
console.log(a);
}
function fn2(fn){
var a=20;
(function(){
fn();
})();
}
fn2(fn);//10
var a=10;
function fn2(){
var a=20;
function fn(){
console.log(a);
}
return fn;
}
fn2()();//20