var num = 10; var obj = { num:20 } // 遇到立即执行就立即执行 立即执行中的this指向window obj.fn = (function(num){ // console.log(this); this.num = 3*num; // 3*20 因为此时绑定的就是20(obj.num) // num被return的函数所引用 所以不会被销毁 一直在内存中保留结果 num++; // console.log("first"); // console.log(this) // fn真正的值 this随之会改变 return function(n){ // console.log(this) this.num+=n; num++; console.log(num); } })(obj.num) var fn = obj.fn; obj.fn(10); // console.log(obj.fn) fn(5); fn(6); console.log(num,obj.num)