2021年3月16日星期二

Js函数闭包的理解及闭包存在一些问题的解决

函数闭包

  • 函数就是闭包,当一个函数被创建时,它的内部的语句、变量、函数等,共同形成了闭包。

    这里简单分析下闭包函数执行调用过程
  function outer(){   var a = 12;   //形成闭包环境中的变量不是一成不变的,可以被更改   function inner(){   console.log(a ++);   }   return inner;   }  ​   var inn = outer();   inn();   inn();

闭包的用途:

可以在函数外部读取函数内部成员

让函数内成员始终存活在内存中

闭包存在的问题

 //闭包的问题  var arr = [];  for(var i = 0;i <= 10;i ++){    arr[i] = function (){    console.log(i);   }  } ​  //应该是输出对应下标  arr[0]();//11  arr[1]();//11  arr[2]();//11</pre>
这个代码只是想实现根据arr下标,console.log出相应的值。但是当调用时,for循环中的i已经执行完了,i = 11。i的作用域太大了,执行时,i的结果就已经执行完了。
解决方法就是形成一个闭包,将i的作用域从全局缩小变成局部作用域,arr[i]()每执行一次,i的值就执行一次,使i的值依旧可以使用。
  //解决  var arr = [];  for (var i = 0; i <= 10; i++) {  //自调用函数  (function (i){  arr[i] = function () {  console.log(i);  }  })(i);  }  ​  //应该是输出对应下标  arr[0]();//0  arr[1]();//1  arr[2]();//2








原文转载:http://www.shaoqun.com/a/630677.html

跨境电商:https://www.ikjzd.com/

一淘比价网:https://www.ikjzd.com/w/1698

菜鸟网络:https://www.ikjzd.com/w/1547


函数闭包函数就是闭包,当一个函数被创建时,它的内部的语句、变量、函数等,共同形成了闭包。这里简单分析下闭包函数执行调用过程functionouter(){vara=12;//形成闭包环境中的变量不是一成不变的,可以被更改functioninner(){console.log(a++);}returninner;}​varinn=outer();inn();inn();闭包的用途:可以在函数外部读取
pat:https://www.ikjzd.com/w/1079
aeo:https://www.ikjzd.com/w/2356
etsy:https://www.ikjzd.com/w/169.html
出口美国必看!美国海关正式实施ACAS计划,违者处罚!:https://www.ikjzd.com/home/97807
Wish政策再调整:确认妥投时间最高延长20天:https://www.ikjzd.com/home/118608
直通车就是送钱?你真的会分析数据吗?:https://www.ikjzd.com/home/100945

没有评论:

发表评论