前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >老尚,能讲讲闭包么?“可以,没问题,马上”

老尚,能讲讲闭包么?“可以,没问题,马上”

作者头像
web前端教室
发布2018-02-07 10:20:17
5260
发布2018-02-07 10:20:17
举报
文章被收录于专栏:web前端教室

到今天,零基础课程中的电商网站项目的部分,基本都结束了。现在这个电商网站的结构变成了下面这样,

(缩略图,请谅解)

接下来的日子开始node以及其它方面的内容,这时有个同学提出,

“当然可以”。

闭包(closure [ˈkloʊʒə(r)]),

它是一个外来词,没有对应的中文含义。你可以认为这个词是生造出来的。

所以关于它的绝大部分解释,都比较生硬难懂。

代码语言:js
复制
function aa(){
 return function(){
 console.log('这个返回的匿名函数,就是闭包。');
 }
}
aa()();

本例中,右侧这个括号,运行的就是return回来的那个匿名函数。

简单的讲,闭包就是,“函数套函数。父函数里面的子函数,就是闭包。”

闭包,是一个作用域。

任何一个函数,都是闭包。例如,

代码语言:js
复制
function bb(){
 console.log('这个bb函数,它就是一个闭包。');
}

闭包的特性:

1,函数内部可以读取全局变量;

2,函数外部不能读取函数内部的变量;

这其实就是变量作用域。

代码语言:js
复制
// 函数内部可以读取全局变量;
var a1 = 999;
function aa(){
 console.log( a1 )
}
aa();
// 函数外部不能读取函数内部定义的变量
function aa(){
 var a33 = 999;
}
console.log( a33 )
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

代码语言:js
复制
function obj(){
 var xx = 1;
 function get(){
 console.log(xx);
 }
 this.get = get;
}
obj.prototype = {
 a:function(){
 console.log('asaa');
 }
}
var xx = new obj();
xx.get();
xx.a();

////////

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 web前端教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档