今天做到一个笔试题又学到了
题目是这样的
var length = 100;
function f1 () {
console.log(this.length)
}
var obj = {
length: 10,
f2: function (f1) {
f1();
arguments[0]();
}
}
obj.f2(f1, 1)
一开始看到这个arguments[0]()有一点蒙蔽
这里主要考的是this的指向问题
- 首先通过obj.f2调用这个对象里的f2函数,执行函数里的代码
- f1()这里是没有调用者的,this指向window,所以window.length等于100
- 而arguments[0]()这里也调用了f1函数,但是这里的调用者其实是argumengts这个为数组,这个为数组里面是有两个数据的,是这样子[f1, 1],所以它的length长度为2
- 最后打印的结果就是100和2
主要是没有明白arguments[0]()的调用者是数组,之前没碰到过
举个例子就是:
obj.name 可以得到那么属性值
而 obj[‘name’] 和上面的效果是一样的
obj.fun() 可以调用obj里的fun方法,调用者是obj
obj[‘fun’]加上 () 同样可以调用fun方法,也就是obj[‘fun’]()
所以像下面这种写法调用者就是数组
function f1 () {}
var arr = [f1, 10, 20]
arr[0]() //调用者就是arr这个数组