JS具有代表性的题-this的理解

第一题:
在这里插入图片描述
这是一道典型的对象调用函数,谁调用的,this就指向谁,o.fn()此时this指向o,因此this.a即o.a,所以输出结果为2
第二题
在这里插入图片描述
fun()是一个典型的函数直接加圆括号,所以其上下文环境为window,里面的this.a=2; this指向window,相当于定义了一个全局变量a=2,第一次fun()返回了一个内层函数,第二个()也是典型的函数直接加(),所以上下文也是window对象,其this是指向window的,所以结果为2.
由上面两题延伸出的知识点扩展:
函数身上有属性,函数内部想要得到有以下两种方法:f.call(f)以及arguments.callee,下面展示其中一种方法。

function f(){
		console.log(this.a)
	}
	f.a=10;
	f.call(f);

第三题
在这里插入图片描述
首先看语句arr0,这是一道典型的数组枚举出函数,然后调用,因此函数里面的this指向数组,所以this.length返回的是数组的长度,结果为2.

第二条该条语句表示fn2()运行得到的结果fn1()继续运行,arr1表示的是数组枚举出来然后运行,此时函数里的this是数组,返回了fn1,fn1直接加圆括号运行,this就是window对象,此时window.length,结果为0

知识点补充:
在定义一个对象的时候,如果值是表达式,在定义的时候就已经被执行掉了,比如:

var obj={
		a:(function(){
            console.log("hh")
		})()
	}
	console.log("kl");//打印顺序为hh kl

第四题

var a=1;
	var obj={
		a:2,
		fn:(function(){
			this.a=3;
			return function(){
				return this.a;
			}
		})()
	}
	var fn=obj.fn;
	var result1=obj.fn();
	var result2=fn();
	console.log(result1);
	console.log(result2);

this.a=3的this指向window,所以相当于定义了一个全局变量a=3,obj.fn()里面的this指向obj,所以结果为2;
fn()里面的this指向window,所以结果为3。

以上是我总结的几道题,写在博客上,方便以后复习。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值