首先,闭包是什么?这个问题,百度上一大堆,然后我也是,现在学的有点累,来回顾一下吧算是,懂的自动略过,小弟不才,道行入不了你们法眼。
我认为的闭包是,就是取到,不是在自己作用域内或者按照js的规则,娶(取)不到的老婆(值)。
也因为js 的一个弱类型,特性,可以返回function 函数对象,也就造成了闭包这个概念,所以这个闭包的概念在其他语言中也有。条件是,1.弱,2.可以返回函数对象。
好,接下来,直接上例子讲解:
算是自我的一种复习吧
第一种:
function a(){
var s = "name";
return s;
}
var s = a()//name;
这是最为普通的,原谅我的用词,“普通”
第二种:
function s(){
var dd = 'name;
return function(){
return dd;
}
}
//调用
var t = s();//这个得到的是 函数 function(){return dd}
再次执行 t();//此时执行得到的是 dd 为name;
那么,我在原来的基础上,再添加一点,考一下大家
var dd = "我是一个屌丝";
function s(){
var dd = 'name;
return function(){
return dd;
}
}
结果为什么?
想
想
想
.
.
.
.
.
.
.
好吧答案还是 : name ;
为什么呢?一个原型链,这个是js 的特性,还有一个是js代码的执行过程。
再来:
第三种;
先写一个面试题吧,我最近在看
for(var i=0;i<5;i++){
setTimeout(function(){
alert(i)
},1000)
}
结果,为什么?
我所理解的是一个延迟效应,setTimeout,
结果为 55555
怎么解决,利用闭包
for(var i=0;i<5;i++){
(function(i){
setTimeout(function(){
alert(i)
},1000)
}(i))
}
这样就会循环出来,当然,如果你去试过 的回发现,是无序的。那么怎么解决这个问题,
据说用的是es6 promise,这个我目前还不会吗,学起来,到时再补充吧
基本上,闭包就是个样子,休息一会,准备去吃饭了