关于闭包-我的浅显理解
2017-09-19 16:37
197 查看
关于闭包,我会想问:闭包咋来的(来源),闭包是啥(概念),闭包存在在什么地方(结构),闭包怎么用,闭包优缺点..顺着这“一条龙”的问法,来串串闭包的历史,就像老师讲历史一样,有问题才有进步,有需求才有市场嘛,不扯了开敲..
1.闭包是咋来的:
函数中的变量,有全局变量和局部变量之分,全局变量能在函数的任何地方被访问(易污染),局部变量只能沿作用域链向上访问却不能在函数外部访问(人家不易被污染),且函数执行完,局部变量将被释放(不可重用)。
so.为了解决全局的易污染、局部的不可重用,soso.闭包就来了...
2.闭包是啥:
闭包是一个能够读取其他函数局部变量的函数。先抛一个大神写的例子:
function tea(){
var n=1;
function blackTea(){
console.log(n++);
}
return blackTea;
}
var Tea = tea();
Tea();
Tea();
这例子里的blackTea函数就是闭包了。换匿名写法:
function tea(){
var n=1;
return function (){
console.log(n++);//这个n是内层函数向上访问外层函数的局部变量而来的,做到了复用局部变量
}
}
var Tea = tea();
Tea();
Tea();
3.闭包存在在什么地方:
直接看blackTea函数存在在整个大函数的位置。
4.闭包怎么用:再上一个例子好了
var type = "the flowers";
var girls_accept = {
type : "the grass",
whoAccepts : function(){
return function(){
return this.type
}
}
}
var accept = girls_accept.whoAccepts();
accept();
-------------------------------------------------------------------------------------------------------
var type = "the flowers";
var girls_accept = {
type : "the grass",
whoAccepts : function(){
var that = this; ====>
//非常重要:外层函数要申明这个变量,确定为外层函数的局部变量
return function(){
return that.type
}
}
}
var accept = girls_accept.whoAccepts();
accept();
5.闭包的优缺点:
内存易泄露:==>易造成内存泄露问题(<==var申明变量却没使用、定时器中任务函数直接是字符串等)。
性能问题
1.闭包是咋来的:
函数中的变量,有全局变量和局部变量之分,全局变量能在函数的任何地方被访问(易污染),局部变量只能沿作用域链向上访问却不能在函数外部访问(人家不易被污染),且函数执行完,局部变量将被释放(不可重用)。
so.为了解决全局的易污染、局部的不可重用,soso.闭包就来了...
2.闭包是啥:
闭包是一个能够读取其他函数局部变量的函数。先抛一个大神写的例子:
function tea(){
var n=1;
function blackTea(){
console.log(n++);
}
return blackTea;
}
var Tea = tea();
Tea();
Tea();
这例子里的blackTea函数就是闭包了。换匿名写法:
function tea(){
var n=1;
return function (){
console.log(n++);//这个n是内层函数向上访问外层函数的局部变量而来的,做到了复用局部变量
}
}
var Tea = tea();
Tea();
Tea();
3.闭包存在在什么地方:
直接看blackTea函数存在在整个大函数的位置。
4.闭包怎么用:再上一个例子好了
var type = "the flowers";
var girls_accept = {
type : "the grass",
whoAccepts : function(){
return function(){
return this.type
}
}
}
var accept = girls_accept.whoAccepts();
accept();
-------------------------------------------------------------------------------------------------------
var type = "the flowers";
var girls_accept = {
type : "the grass",
whoAccepts : function(){
var that = this; ====>
//非常重要:外层函数要申明这个变量,确定为外层函数的局部变量
return function(){
return that.type
}
}
}
var accept = girls_accept.whoAccepts();
accept();
5.闭包的优缺点:
内存易泄露:==>易造成内存泄露问题(<==var申明变量却没使用、定时器中任务函数直接是字符串等)。
性能问题
相关文章推荐
- 关于 js 的 prototype , call,apply ,闭包,回调 个人浅显理解
- 关于闭包即双层装饰器的理解
- javascript执行上下文、作用域与闭包(第七篇)---关于闭包典型例子的理解
- JavaScript关于作用域、作用域链和闭包的理解
- 关于Javascript 闭包的理解
- 关于Python闭包的理解
- 浅显理解 Python 闭包
- 关于闭包与for循环的理解
- 关于闭包的简单理解
- 【闭包概念】关于闭包概念各路神仙的不同解读——你可以自己理解。
- 关于闭包的理解
- 关于Python中闭包与装饰器的理解
- 关于java JDK动态代理的浅显理解
- 浅显理解 Python 闭包
- 关于重定位代码的浅显理解
- 关于对Java中异常处理的try catch和throw的理解(浅显理解)
- 关于闭包的理解(JS学习小结)
- 关于我理解的闭包(一)
- 关于Lua的面向对象和闭包的理解
- 关于perl闭包(个人理解)