最近去面试,遇到了一个这样的笔试题,考察到的知识点是闭包。
function fn(n,i){
console.log(i);
return {
fn: function(m){
return fn(m,n);
}
}
}
fn(1).fn(2).fn(3).fn(4);
依次输出:
undefined
1
2
3
一起来分析一下这个程序是怎么进行的:
1、执行fn(1)
时,函数只传入了一个参数,n
为1
,所以o
为undefined
,此时控制台输出undefined
,按照最简单的理解,调用函数等于函数的返回值,所以这时fn(1)
的值是一个对象:
{
fn: function(m){
return fn(m,1);
}
2、执行到fn(2)
时,是调用对象里的fn
,所以此时m
的值为参数2
,fn(1).fn(2)
的值为 fn(2,1)
,这时会执行fn(2,1)
,控制台输出1
,执行了之后,又等于它的返回值,又是一个对象,对象的值为:
{
fn: function(m){
return fn(m,1);
}
未完待续。。。。
参考资料: