JS中一道关于this和闭包的题

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

原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13640324.html