JS理解之闭包

首先,闭包是什么?这个问题,百度上一大堆,然后我也是,现在学的有点累,来回顾一下吧算是,懂的自动略过,小弟不才,道行入不了你们法眼。

我认为的闭包是,就是取到,不是在自己作用域内或者按照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,这个我目前还不会吗,学起来,到时再补充吧

基本上,闭包就是个样子,休息一会,准备去吃饭了

posted on 2017-04-24 16:19  xiao_style  阅读(258)  评论(0编辑  收藏  举报

导航