博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闭包函数详解
阅读量:6434 次
发布时间:2019-06-23

本文共 930 字,大约阅读时间需要 3 分钟。

闭包函数详解

从技术的角度讲,所有的JavaScript函数都是闭包:它们都是对象,它们都关联到作用域链。当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。
闭包的作用
闭包的应用比较典型是定义模块,我们将操作函数暴露给外部,而细节隐藏在模块内部。
function fn1() { var name = 'iceman'; function fn2() { console.log(name); } return fn2; } var fn3 = fn1(); fn3();
这样就清晰地展示了闭包:

fn2的词法作用域能访问fn1的作用域

将fn2当做一个值返回

fn1执行后,将fn2的引用赋值给fn3

执行fn3,输出了变量name

我们知道通过引用的关系,fn3就是fn2函数本身。执行fn3能正常输出name,这不就是fn2能记住并访问它所在的词法作用域,而且fn2函数的运行还是在当前词法作用域之外了。

正常来说,当fn1函数执行完毕之后,其作用域是会被销毁的,然后垃圾回收器会释放那段内存空间。而闭包却很神奇的将fn1的作用域存活了下来,fn2依然持有该作用域的引用,这个引用就是闭包。

总结:一个函数在内部无法被调用,利用外部的函数返回值return让内部函数可以被调用。

关于递归函数的详细理解
递归算法是一种看似简单,但逻辑性比较复杂的算法,
一般用if需要设置好递归函数的结束条件,不然容易陷入死循环。

function f(n) {

if (n <= 1){
// console.log(1111);
return 1;
}else {
// console.log(n * f(n-1));
return n * f(n-1);
}
}

console.log(f(10)); // 3628800

这样就清晰地展示了递归函数的运算:
递归的特点总结:

优点,自调用,就是在函数里面调用自己.

缺点,就是消耗大量内存

谢谢阅读,小编不容易,可以的话点个置顶呗。 谢谢。 喵喵喵~~~

转载于:https://www.cnblogs.com/caominjie/p/10897435.html

你可能感兴趣的文章
Go抓取网页数据并存入MySQL和返回json数据<三>
查看>>
MySQL复制介绍及搭建
查看>>
Java在线调试工具
查看>>
[译]CSS-理解百分比的background-position
查看>>
虚拟机安装CentOS
查看>>
Idea里面老版本MapReduce设置FileInputFormat参数格式变化
查看>>
在 win10 环境下,设置自己写的 程序 开机自动 启动的方法
查看>>
Unity3d游戏开发之-单例设计模式-多线程一
查看>>
通过jquery定位元素
查看>>
Tooltip表单验证的注册表单
查看>>
UWP开发中两种网络图片缓存方法
查看>>
超8千Star,火遍Github的Python反直觉案例集!
查看>>
【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?...
查看>>
全球首家!阿里云获GNTC2018 网络创新大奖 成唯一获奖云服务商
查看>>
Python简单HttpServer
查看>>
Java LinkedList工作原理及实现
查看>>
负载均衡SLB的基本使用
查看>>
Centos 7 x86 安装JDK
查看>>
微信小程序的组件用法与传统HTML5标签的区别
查看>>
Hangfire 使用笔记
查看>>