題目一
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 函數(shù)的最終調(diào)用者 規(guī)律二
//對象.方法()
題目二
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.在函數(shù)內(nèi)部 如果想得到函數(shù)自身,用this是不可能的铣揉,就得調(diào)用arguments.callee
函數(shù)的最終調(diào)用 ,是arguments對象進行方括號索引得到這個函數(shù)熄捍,然后加圓括號調(diào)用了然走,所以符合規(guī)律2或者 規(guī)律 5.如果你認為arguments是對象,此時規(guī)律2第一次。如果你認為arguments是數(shù)組寒跳,也沒事,規(guī)律5生效竹椒,此時無論如何冯袍,函數(shù)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) //實參
函數(shù)的length是什么呢 函數(shù)的長度是形參列表的長充 就是函數(shù)定義的時候 寫在fun()圓括號里的字母個數(shù),無視你的實參個數(shù)
也就是說 arguments.callee.length就是形參列表的個數(shù)
而arguments.length表示實參個數(shù)碾牌,就是調(diào)用函數(shù)的時候傳進來的實參個數(shù)
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