首先,闭包是什么?这个问题,百度上一大堆,而后我也是,如今学的有点累,来回顾一下吧算是,懂的自动略过,小弟不才,道行入不了大家法眼。es6
我认为的闭包是,就是取到,不是在本身做用域内或者按照js的规则,娶(取)不到的老婆(值)。
也由于js 的一个弱类型,特性,能够返回function 函数对象,也就形成了闭包这个概念,因此这个闭包的概念在其余语言中也有。条件是,1.弱,2.能够返回函数对象。面试
好,接下来,直接上例子讲解:
算是自个人一种复习吧promise
第一种:闭包
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;
}
}
结果为何?io
想
想
想
.
.
.
.
.
.
.
好吧答案仍是 : 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,这个我目前还不会吗,学起来,到时再补充吧
基本上,闭包就是个样子,休息一会,准备去吃饭了