当前位置: 代码迷 >> 综合 >> js 高级5 闭包 async 和 await
  详细解决方案

js 高级5 闭包 async 和 await

热度:27   发布时间:2023-12-25 02:18:04.0
function lazy_sum(arr){var sum=function (){return arr.reduce(function(x,y){return x+y;})}return sum;
}
var f = lazy_sum([1, 2, 3, 4, 5]);
console.log(f);    // function sum()
console.log(f());	// 15
let sumAdd=f()+f();
console.log(sumAdd);	// 30// 在lazy_sum定义了sum,内部的sum又应用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时
// 相关参数和变量都保持在返回的函数中 叫闭包
function count() {var arr = [];for (var i=1; i<=3; i++) {arr.push(function () {return i * i;});}return arr;
}var results = count();
var f1 = results[0];
var f2 = results[1];
var f3 = results[2];console.log(f1());		// 16
console.log(f2());		// 16
console.log(f3());		// 16function count2(){var arr=[];for(var i=1;i<=3;i++){arr.push((function(n){return function(){return n*n;}})(i));}return arr;
}
var results2=count2();
var f3=results2[1];	
console.log(f3());		// 4
// 闭包并非立即执行所以尽量不要循环 而等三个函数返回时i已经变了。可以创建一个匿名函数解决 或者使用letfunction create_counter(initial){var x=initial || 0;return {inc:function(){x+=1;return x;}}
}
var c1=create_counter();
console.log(c1.inc());  1
// js没有class机制 借助闭包可以封装一个私有变量 闭包就是一个携带状态的函数
        async present() {               // 表示异步调用this.isLoading = true;return await this.loadingController.create({        等待返回message: '疯狂加载中...',duration: 2000,}).then(a => {a.present().then(() => {if (!this.isLoading) {a.dismiss().then( );}});});}

 

  相关解决方案