webveuje/js/lx/this.md
2021-03-23 10:58:10 +08:00

1.4 KiB
Raw Permalink Blame History

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 并说明原因

理论题: 谈谈什么是闭包