JS理解之闭包

时间:2023-03-08 17:23:42

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

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

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