JS理解之闭包

首先,闭包是什么?这个问题,百度上一大堆,而后我也是,如今学的有点累,来回顾一下吧算是,懂的自动略过,小弟不才,道行入不了大家法眼。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,这个我目前还不会吗,学起来,到时再补充吧

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

相关文章
相关标签/搜索