js闭包的9个使用场景有哪些,js闭包的应用场景

js闭包的9个使用场景有哪些,js闭包的应用场景,js闭包的9个使用场景

本文主要介绍js闭包的9种使用场景,帮助你更好的理解和学习JavaScript闭包的使用。感兴趣的朋友可以了解一下。

1.返回值(最常用)

//1.最常用的返回值

函数fn(){

var name=' hello

返回函数(){

返回名称;

}

}

var fnc=fn();

console . log(fnc())//你好

很容易理解名字是以闭包的形式返回的。

2.函数赋值

var fn2

函数fn(){

var name=' hello

//将功能分配给fn2

fn2=function(){

返回名称;

}

}

Fn()//首先执行赋值,

Console.log(fn2())//执行输出fn2

在闭包中设置fn2函数的值,以闭包的形式记忆name属性,执行会输出hello。

3.函数参数

函数fn(){

var name=' hello

返回函数回调(){

返回名称;

}

}

var 1=fn()//执行函数将返回值(回调函数)赋给fn1,

功能fn2(f){

//将函数作为参数传入

console . log(f());//执行函数并输出。

}

2(FN1)//执行输出fn2

用闭包返回一个函数,把这个函数作为另一个函数的参数,在另一个函数中执行这个函数,最后输出hello。

4.IIFE(自执行函数)

(函数(){

var name=' hello

var fn1=function(){

返回名称;

}

//在自执行函数中直接调用fn2,将fn1作为参数传递。

fn2(fn1);

})()

功能fn2(f){

//将函数作为参数传入

console . log(f());//执行函数并输出。

}

在自执行函数中直接传递封装的函数fn1到fn2,并将其作为参数调用,同样得到结果hello。

5.循环赋值

//每秒执行一次,分别输出1-10。

for(var I=1;i=10i ){

(函数(j){

//j来接收

setTimeout(function(){

console . log(j);

},j * 1000);

})(i)//i作为参数传入。

}

如果不使用闭包,会有不同的情况。你可以阅读我自己关于闭包的文章。

6.getter和setter

函数fn(){

var name='你好'

setName=function(n){

name=n;

}

getName=function(){

返回名称;

}

//返回setName,getName作为对象的属性

返回{

集合名称:集合名称,

getName:getName

}

}

var fn1=fn();//返回对象,属性setName和getName是两个函数。

console . log(fn1 . getname());//getter

fn1 . set name(' world ');//setter修改闭包内的名称。

console . log(fn1 . getname());//getter

第一次输出hello,用setter,然后输出世界。这可以封装成一个公共方法,防止不想公开的属性和函数对外公开。

7.迭代器(执行一次函数往下取一个值)

var arr=['aa ',' bb ',' cc '];

函数incr(arr){

var I=0;

返回函数(){

//这个函数每次执行都返回数组arr中I下标对应的元素

Return arr[i] || '数组值已被遍历';

}

}

var next=incr(arr);

console . log(next());//aa

console . log(next());//bb

console . log(next());//抄送

console . log(next());//数组值已被遍历

8.首次区分(相同的参数,函数不会重复执行)

var fn=(function(){

var arr=[];//用于缓存的数组

返回函数(val){

If(arr.indexOf(val)==-1){//如果缓存中什么都没有,就意味着需要执行。

arr . push(val);//将参数推入缓存数组

Console.log('函数已执行',arr);

//在这里写下你要执行的函数

}否则{

Console.log('此功能不需要执行');

}

Console.log('函数调用后打印出来,这样可以查看缓存的数组:',arr);

}

})();

fn(10);

fn(10);

fn(1000);

fn(200);

fn(1000);

执行结果如下:

可以清楚的看到,第一次执行会被保存,第二次执行会直接被执行。

9.缓存

//比如sum运算,如果没有缓存,每次调用都要重复,用缓存里已经做好的东西去找,找到了就直接返回,不用重新计算。

var fn=(function(){

var cache={ };//缓存对象

Var calc=function(arr){//计算函数

var sum=0;

//总和

for(var I=0;iarr .长度;i ){

sum=arr[I];

}

返回总和;

}

返回函数(){

var args=array . prototype . slice . call(arguments,0);//参数被转换成数组

var key=args.join(',');//用逗号将参数连接成字符串

var result,tSum=cache[key];

If(tSum){//如果缓存有

Console.log ('get from the cache:',cache)//打印以便于查看

结果=tSum

}否则{

//重新计算,存入缓存,同时赋给result。

结果=cache[key]=calc(args);

Console.log('存储在缓存中:',缓存)//打印以便于查看

}

返回结果;

}

})();

fn(1,2,3,4,5);

fn(1,2,3,4,5);

fn(1,2,3,4,5,6);

fn(1,2,3,4,5,8);

fn(1,2,3,4,5,6);

输出结果:

以上是js闭包9个使用场景的细节。关于js闭包使用场景的更多信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: