//问:以下代码的输出是怎么样的?
function fun(n,e){
console.log(e)
return{
fun:function(m){
return fun(m,n)
}
}
}
var a=fun(1);//undefined
//原因:这时e没有传参,所以打印了undefined
// a代表的是
// {
// fun:function(m){
// return fun(m,1) //这里的1即代表了fun(n,e)中的e,所以不管后面a.fun(m)传任何参数,打印的都是1
// }
// }
a.fun(1);//1
/*可以解析为执行了
function(1){
return fun(1,1)
}
fun(1,1),会打印出1
所以console.log 1*/
a.fun(2);//1
//可以解析为执行了function(2){
// return fun(2,1)
// }
//fun(2,1),会打印出1
//所以console.log 1
a.fun(3);//1
//可以解析为执行了function(1){
// return fun(3,1)
// }
//fun(3,1),会打印出1
//所以console.log 1
一道关于闭包的题目(在小红书刷到的)
于 2022-03-03 13:59:36 首次发布
这篇博客探讨了JavaScript中的闭包和递归函数。通过一个具体的代码示例,展示了如何创建一个返回内部函数的函数,该内部函数在每次调用时保持对外部变量的引用,即使外部函数已经执行完毕。博主详细解释了为何`a.fun(m)`始终返回1,即使传入不同的参数,这是因为闭包保存了第一次调用时的n值。这个例子深入解析了JavaScript中的作用域和闭包特性。
摘要由CSDN通过智能技术生成