this和闭包的一道练习题
var num = 20;
var obj = {
num: 30,
fn: (function (num){
this.num *= 3;
num += 15;
var num = 45;
return function(){
this.num *= 4;
num += 20;
console.log(num);
}
})(num)
};
var fn = obj.fn();
fn();
obj.fn();
console.log(window.num, obj.num);
-> 65
-> 85
-> 240, 120
obj.fn()执行
执行this.num * = 3 将全局下的num改为 60
执行 num+=15,将私有作用域下的num改为45,因为num是形参VAR不影响私有变量num
执行 num = 45,私有变量num 为45
因为私有作用域下的F2函数被外部引用,所以栈内存不销毁
执行fn()
执行this.num * = 4,将全局下的num更改为240
执行 num + = 20,将上级作用于下的私有变量num改为65
执行console.log(num) => 65
执行obj.fn()
执行this.num * = 4,将obj实例中的num改为120
执行num + = 20, 将上级作用于下的私有变量num改为85
执行console.log(num) => 85
执行console.log(window.num, obj.num) => 240, 120