一道有意思的闭包题

Posted Vicky沛沛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道有意思的闭包题相关的知识,希望对你有一定的参考价值。

gitbook完整版集合

闭包

  • 函数嵌套

  • 内部函数使用外部函数的局部变量

  • 优点:延长外部函数局部变量的生命周期;缺点:内存泄漏

  • 合理使用闭包,及时销毁

function fun(n,o)
  console.log(o)		//执行var a = fun(0)时候o没有定义,undefined
  return 
    fun:function(m)
      return fun(m, n);			//这个fun是window的fun也就是全局的fun
    
  


//a中存的是同一个返回方法,是同一个fun(m,n),此时存的n都是第一次的0,后面也只是改m所以n都是0,o打印都为0
var a = fun(0)			//结果给a赋值返回一个对象fun:function()...
a.fun(1)				//0
a.fun(2)				//0
a.fun(3)				//0

//注意这里区别于上面,这里每次执行完之后保存的n都是上一次返回的n
var b = fun(0).fun(1).fun(2).fun(3)		//undefined 0 1 2

//同理:
var d = fun(0).fun(1).fun(2).fun(3).fun(67).fun(45)  //undefined 0 1 2 3 67


var c = fun(0).fun(1) //undefined 0 此后c上的n保存变成了1

c.fun(2)		//1
c.fun(3)		//1 

以上是关于一道有意思的闭包题的主要内容,如果未能解决你的问题,请参考以下文章

一道javascript面试题(闭包与函数柯里化)

解析js中作用域闭包——从一道经典的面试题开始

一道容易栽坑的有趣的面试题(关于js,定时器,闭包等)

一道前端面试题?求大神解答

从一道题深入HTTP协议与HTTP请求走私

复杂链表的复制(一道算法题)