闭包

xiaoxiao2021-02-28  50

闭包

闭包(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();

简单的讲,上面这些就是闭包的内容

转载请注明原文地址: https://www.6miu.com/read-76551.html

最新回复(0)