返回闭包时,不要引用循环变量,或后续会发生变化的变量。
若闭包一定要引用循环变量,必须与立即执行函数配合使用。
闭包:
将函数作为返回值:
function sun(array){
var sum=function(){
return array.reduce(function(x,y){return x+y;});
}
return sum;
}
console.log( sun([1,2,3,4,5]) ); //结果为[Function: sum]
调用返回的函数时,结果才为 15:
console.log( sun([1,2,3,4,5])() );
立即执行函数:
在闭包基础上,在创建一个函数【嵌套函数,格式为: (function(参数){})(循环变量) 】,用此函数的参数绑定 循环变量当前的值,参数的值执行到循环变量的值时,会终止。
注:理论上【function (x) { return x * x } (3);】可以这么写,但JavaScript语法解析会报syntaxerror错误,因此需要用()把整个函数定义括起来。
闭包功能理解:
闭包是带 状态 的函数,且状态可隐;把多参数变为单参数函数。如:
function make_pow(n) {
return function (x) {
return Math.pow(x, n);
}
}
调用:
var pow2 = make_pow(2); //创建新函数
var pow3 = make_pow(3); //
var pow4 = make_pow(4); //
console.log(pow2(5)); // 25
console.log(pow3(7)); // 343
console.log(pow4(2)); // 343
console.log(make_pow(3)); // 返回函数
console.log(make_pow(3)(2)); // 8
JavaScript理解笔记——高阶函数之闭包、立即执行函数(一)
最新推荐文章于 2022-06-18 17:23:56 发布