闭包、箭头函数、generator JavaScript边学边记(五)

闭包:函数 + 创建函数的词法环绕的组合

函数除了可以接受函数作为参数,还可以将函数作为结果值返回。返回的是函数,而不是结果。
可以类比于Java中类,只有一个公共方法(闭包中返回的函数)的类类似于闭包。

function make_sum(arr) {
    var sum = function () {
        return arr.reduce(function (x, y) {
            return x + y;
        });
    }
   sum();
}

若调用make_sum([1,2,3])时会直接返回6

function lazy_sum(arr) {
    var sum = function () {
        return arr.reduce(function (x, y) {
            return x + y;
        });
    }
   return sum;
}

调用lazy_sum([1,2,3])时,会返回一个函数。

  1. 内部函数可以引用外部函数的参数和变量
  2. var f = laz_num([1,2,3]); 此时返回求和函数而不是结果。调用f()时才回返回结果6
  3. 返回的函数互相独立,互不影响。
  4. 返回的函数不立即执行,只有调用时才执行。

注意
返回的函数不要引用任何循环变量,或者后续会变化的变量。

用法

  1. 实现类的私有变量与私有方法
  2. 将多参数函数改变为单参数函数

一知半解,先简单记记。

立即执行的函数写法

(function (x) {
	return x * x;
})(4);

箭头函数

不论是用法还是含义,和Lambda表达式一样

var result = 
	(x, y) => {
		return x + y;
	};
  1. 单个参数时,小括号可以省略。零个或多个参数时都不能省略
  2. 单个表达时,return和{}可省略
  3. 箭头函数中this指向词法作用域

generator ES6可以返回多个值

function* foo(x) {
	yield x++;
	yield x++;
	yield x++;
	return x + 3;
}
  1. 使用function*标识,注意*
  2. 除使用return返回值外,还可以通过yield 多次返回
  3. 调用方法
  • 先调用方法,返回一个generator对象
  • 使用next()方法
var g = foo(5);
console.log(g.next());
console.log(g.next());
console.log(g.next());
console.log(g.next());

// OUTPUT

Object { value: 5, done: false }
Object { value: 6, done: false }
Object { value: 7, done: false }
Object { value: 11, done: true }
value 为每次返回的值,done属性标识是否是最后一次输出
  • 使用 for .. io循环遍历
var g = foo(5);
for(var value of g) {
	console.log(value);
}
// OUTPUT

5
6
7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值