1 基本使用方式:
函数也可以像其他的数据一样,作为返回值使用(只要返回函数体即可,命名函数和匿名函数均可)
function fun () {
return function () {
console.log('这是返回值返回的函数体中的代码');
};
}
var result = fun();
console.log(result);
2 闭包(闭包函数):
2.1 私有变量的概念
函数内声明的变量称为局部变量,这个变量只能被当前作用域内部访问,外部无法访问。
由于这个特点,所以局部变量也称为私有变量。
2.2 私有变量访问的问题
这个私有变量在当前函数外无法访问,如果希望进行操作,如何进行呢?
先尝试了return操作,虽然可以得到值,但是无法再函数外对同一个私有变量进行多次操作
如果我们希望可以在函数外多次操作函数内的私有变量,该如何进行呢?
2.3 闭包函数的概念:
概念:一个可以对私有变量进行操作的函数称为闭包函数,简称闭包。
作用:
- 可以让数据实现私有化,同时可以对一个私有变量进行操作。
- 同时操作方式由功能设置时进行指定,函数外只可以根据我们设置功能时的指定方式进行操作,确保了数据的安全。
function fun () {
var num = Math.random();
return function () {
num++;
console.log(num);
};
}
var result = fun(); // 返回的匿名函数
result(); // 同一个值
result(); // 同一个值
result(); // 同一个值
例如说,准备了3个数组,希望对三个数组进行求和
var arr1 = [1, 2], arr3 = [3, 4], arr4 = [5, 6];
function getSum () {
私有变量
var sum = 0;
return function (arr) {
每次调用时,传入任意一个数组,并对数组求和,将总和保存在私有变量sum中
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
console.log(sum);
};
}
var result = getSum(); // 得到了一个可以进行私有变量操作的函数(闭包)
result(arr1);
result(arr3);
result(arr4);
闭包虽然可以从一定程度上确保数据的安全性,但是无法绝对确保安全:
闭包函数在大型开发中比较常用,避免后面出现重名的变量改变了之前变量的值从而对整体页面效果造成影响,缺点也很明显,不会再函数使用后销毁变量,占用了一定的内存空间,所以在开发的时候要合理的使用闭包,而不是胡乱使用