闭包
来源:互联网 发布:博客源码手机 编辑:程序博客网 时间:2024/05/29 17:28
闭包
闭包(closure):
它是一个外来词,没有对应的中文含义.你可以认为这个词是创造出来的.
所以关于它的绝大部分解释,都比较生硬难懂.
function aa() { return function () { console.log('这个返回的匿名函数,就是闭包'); } } aa()();//这个返回的匿名函数,就是闭包
本例中,右侧这个括号,运行的就是return回来的那个匿名函数.
简单的讲闭包就是,”函数套函数”.父函数里面的子函数,就是闭包.”
闭包,是一个作用域.
//==============================================================
function bb() { console.log('这个bb函数,它就是一个闭包'); } bb();//这个bb函数,它就是一个闭包
闭包的特性:
- 函数内部可以读取全局变量;
- 函数外部不能读取函数内部的变量;
这其实就是变量作用域.
//==============================================================
函数内部可以读取全局变量;
var a1 = 999; function aa() { console.log(a1); } aa();//999
//==============================================================
函数外部不能读取函数内部定义的变量
function aa() { var a33 = 999; } console.log(a33);//(报错)a33 is not defined aa();
//==============================================================
父函数aa不能读取子函数bb的变量
function aa() { var a1 = 999; console.log(b1); function bb() { var b1 = 888; console.log('这个返回的匿名函数,就是闭包.') } } aa();//(报错)b1 is not defined
//==============================================================
父函数读取子函数里面的变量,要使用return
function aa() { var aa1 = 999;//私有变量 function bb() { console.log(aa1); } return bb; } var xx = aa(); xx();
//==============================================================
闭包的用途之一,用来定义”私有方法”和”私有变量”.
这种私有的方法和变量,在外部无法访问.
//==============================================================
下面是一个对象,它同时也是一个函数,当添加了prototype的时候,他也是构造器,它有一个私有方法get,用来访问它自己内部的变量XX
function obj() { var xx = 1; function get() { console.log(xx);//1 } this.get = get; } obj.prototype = { a: function () { console.log('asaa');//asaa } } var xx = new obj(); xx.get(); xx.a();
简单的讲,上面这些就是闭包的内容
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- walsh-Hadamard变换
- sass入门
- Linux下的top命令详细解释
- 使用RecyclerView添加Header和Footer的方法
- spring对rabbitmq RPC的支持
- 闭包
- OpenJudge 2.5 7084:迷宫问题
- 问题 G(1203): 【基础算法】0/1字符串问题
- opencv傅里叶变换实例
- C++开源库
- Ubuntu chmod 命令修改文件权限
- svn中如何checkout之前的版本
- Centos_7_Nginx_+_PHP_安装步骤
- Android从APP启动第三方地图导航