都说js简单,我觉得学好也不容易,不但有些概念不好理解,而且琐碎的知识很多。一不小心就会犯错。来看下面一个笔试题。
var length = 10
function fn(){
alert(this.length)
}
var obj = {
length: 5,
method: function(fn) {
fn() // ?
arguments[0]() // ?
}
}
obj.method(fn)
上面问号语句执行结果?
答案:
这里的坑主要是arguments,我们知道取对象属于除了点操作符还可以用中括号,这里fn的scope是arguments,即fn内的this===arguments,调用时仅传了一个参数fn,因此length为1。
【看来函数传参机制是将实参作为函数arguments的属性传入的,因此当参数为函数时,相当于arguments调用函数。】 |
|