题目一
function fn(){
alert(this.a);
}
var obj= {
"a" : 1,
"b" : 2,
"c" : [{
"a" : 3,
"b" : 4,
"c" : fn
}]
}
var a =5;
obj.c[0].c() //3 函数的最终调用者 规律二
//对象.方法()
题目二
function fun(m,n,o,p,q,r){
alert(this.length);
}
function f(a,b){
arguments[0](9,10,11,12);
}
f(fun,5,6,7); //4
正确答案是4 这是一个标准面试题.
首先说说什么是arguments.callee.在函数内部 如果想得到函数自身,用this是不可能的,就得调用arguments.callee
函数的最终调用 ,是arguments对象进行方括号索引得到这个函数,然后加圆括号调用了,所以符合规律2或者 规律 5.如果你认为arguments是对象,此时规律2第一次。如果你认为arguments是数组,也没事,规律5生效,此时无论如何,函数fun里面的this是argument对象
function fun(){
console.log(arguments.callee === fun); //true
}
fun()
//弹出true
function fun(a,b,c,d,e,f){ //形参
console.log(arguments.callee.lenght); //6
console.log(arguments.lenght); //3
}
fun(88,86,99) //实参
函数的length是什么呢 函数的长度是形参列表的长充 就是函数定义的时候 写在fun()圆括号里的字母个数,无视你的实参个数
也就是说 arguments.callee.length就是形参列表的个数
而arguments.length表示实参个数,就是调用函数的时候传进来的实参个数
function fun(m,n,o,p,q,r){
alert(this.arguments.length);
}
function f(a,b){
arguments[0](9,10,11,12);
}
f(fun,5,6,7); //2