前言: 今天就先和大家一起聊一聊我理解的闭包。在聊这个问题之前,先了解一下变量的定义域。 在js中,变量定义域有全局作用域和局部作用域之说。es6 中新出现的变量声明关键字,就是为了解决部分变量作用域混乱引入的。全局作用域在这就不谈了。主要说说函数的作用域。
一、作用域简单一点说,函数的作用域,就是函数的花括号内部,先看两个例子,或许能对这个概念理解的更好一点 function f1(){ let n = 999 console.log(n)}f1() // 999function f2(){ let n = 999}alert(n); // 报错
二、函数的返回值要说闭包之前,我得先说一下函数返回值。关于函数的返回值,小编也是年初才有了一个更深层次的理解。没有返回值的函数,执行之后会返回undefined ,有返回值的函数,执行之后就变成了对应的返回值。就像这样 // 没有返回值的函数function f1(){ alert(666)}console.log(f1()) // 出现弹窗之后,在控制台输出undefind// 存在返回值function f2(){ alert(666) return 'over'}console.log(f2()) // 出现弹窗之后,在控制台输出over。当然,可以返回字符串,也可以返回Bealon,还可以返回函数。
三、函数嵌套在《重构 下载地址: 一些在TypeScript上费过时间的地方总结 JS实现消灭星星案例 |