# this 1 function fn2(){ console.log(this.n) var n='n' this.n=10 console.log(n) } var obj={fn2:fn2, n:1} fn2() obj.fn2() console.log(obj.n, window.n) 2 function f(){console.log(this)} var obj={ fn: (function(){ return this.f })(), f: function(){console.log(this)} } f() obj.f() obj.fn() 3 var n = 10 var obj1={ n:1, f:function(){this.n++; n=this.n++} } obj1.f() console.log(n) console.log(obj1.n) window.setTimeout(obj1.f, 1000) 4 console.log(getA) if('a' in window){ var a = '' function getA(a){ a = a||this.a console.log(this.a) } getA(a) } 5 var a=2 var obj1 = { a:1, fn1: (function(a){ this.a = a a++ return function(){ this.a = a++ console.log(a) } })(a) } obj1.fn1() var fn1 = obj1.fn1 fn1() // window.a = 4,a=5 6 var c=3 function getC(){ this.c++ return function (){ c=this.c*2 console.log(c) } } var obj3={ c: 2, getC:(function(){ this.c -= 1 return this.getC })() } getC() obj3.getC() var f3=obj3.getC f3() console.log(window.c) console.log(obj3.c) for (var i = 1; i <= 5; i++) { setTimeout( function timer() { console.log(i); }, 1000 ); } 上面的代码会输出什么?怎么改动上述代码,使其依次输出1、2、3、4、5 并说明原因 理论题: 谈谈什么是闭包