没想到代码一次测试成功.~~只不过是FF下面,修改一下支持IE了。由于IE不认function表达式.

var Iterator = function (fn) {
    var coroutine = null;
    var cofn_this = null;
    var yield = function() {
        coroutine.apply(cofn_this, arguments);
    }
    // support IE.
    // NOTE: IE eval("function(){}") does not return a function object.
    eval('fn = ' + fn.toString());
    return function(cofn, cothis){
        coroutine = cofn;
        cofn_this = cothis;
        return fn.apply(this)
    };
}

Array.prototype.forEach = new Iterator(function () {
    for (var i = 0; i < this.length; i ++) {
        yield(this[i])
    }
});
// example.
this.display = window.alert;

var A = [1,2,3,4,5];
A.forEach(function(it){
    this.display(it)
}, this);

其中有一个技巧:

fn = eval(fn.toString())

用于将fn中的引用绑定到当前的上下文中,这样fn中的yield才会引用到我们定义的yield函数。

注意一下,如果你需要在coroutine里访问其他this上下文,需要向iterator传递进去, 如 example.

转载于:https://www.cnblogs.com/hackwaly/archive/2008/07/27/1252617.html

javascript实现yield相关推荐

  1. scrapy好看小说爬取源代码

    scrapy spider文件 # -*- coding: utf-8 -*- import scrapy from scrapy import Request import sys reload(s ...

  2. 在JavaScript中实现yield,实用简洁实现方式。

    原题还是老赵的: http://blog.zhaojie.me/2010/06/code-for-fun-iterator-generator-yield-in-javascript.html 原以为 ...

  3. 在javascript中使用yield

    yield 关键字用来暂停和恢复一个生成器函数((function* 或遗留的生成器函数). /*** 在控制台每隔1秒,依次输出* 0,1,2,3,4*///延迟1秒返回n function del ...

  4. javascript函数全解

    0.0 概述 本文总结了js中函数相关的大部分用法,对函数用法不是特别清晰的同学可以了解一下. 1.0 简介 同其他语言不同的是,js中的函数有2种含义. 普通函数:同其他语言的函数一样,是用于封装语 ...

  5. !! javascript_产量! 产量! 生成器如何在JavaScript中工作。

    !! javascript by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 产量! 产量! 生成器如何在JavaScript中工作. (Yield! Yiel ...

  6. javascript迭代器_JavaScript符号,迭代器,生成器,异步/等待和异步迭代器-全部简单解释...

    javascript迭代器 by rajaraodv 通过rajaraodv JavaScript符号,迭代器,生成器,异步/等待和异步迭代器-全部简单解释 (JavaScript Symbols, ...

  7. JavaScript 异步编程--Generator函数、async、await

    JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...

  8. JavaScript异步调用的发展历程

    同步与异步 通常,代码是由上而下依次执行的.如果有多个任务,就必须排队,前一个任务完成,后一个任务才能执行.这种连续的执行模式就叫做同步. a(); b(); c(); 复制代码 上面代码中,a.b. ...

  9. [译] 什么是 JavaScript 生成器?如何使用生成器?

    原文地址:What are JavaScript Generators and how to use them 原文作者:Vladislav Stepanov 译文出自:掘金翻译计划 本文永久链接:g ...

最新文章

  1. 腾讯告诉你小孩子的钱也有多好赚,一月花费25万不是梦!
  2. mysql字符串区分大小写么_mysql字符串区分大小写的问题-阿里云开发者社区
  3. HDOJ 4883 TIANKENG’s restaurant
  4. eclipse执行单元测试报CreateProcess error=87的解决方法
  5. 16位/32位中断机制比較
  6. rust怎么拆除墙壁指令_人类跌落梦境:城堡怎么过 不少玩家卡在了第六关城堡地图这里...
  7. STL stack 容器
  8. 基于ProtocolBuffer和ysocket的Swift即时通讯服务器搭建
  9. webpack3.0 压缩css 但是不在html中引用,webpack怎样压缩css?
  10. python - 接口自动化测试 - MysqlUtil - 数据库操作封装
  11. 软件项目需求分析报告模板
  12. 误ghost后手工修改分区表来恢复数据
  13. [POI2013]LUK-Triumphal arch【树形DP+二分答案】
  14. PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)
  15. rtl8812驱动分析(二)
  16. Linux相关实验总结
  17. linux之if [ $? -ne 0 ];
  18. 去除COD有机物树脂A-722MP
  19. 反射机制-Reflected
  20. Linux是什么?大牛十年Linux心得文档给你答案

热门文章

  1. 分类mysql_MySql分类
  2. 人脸检测算法_目前最强!开源人脸检测算法:RetinaFace
  3. OpenCV-Python 相机校准和消除畸变
  4. atomic 内存序_并行编程的内存顺序 2020-11-23
  5. 对于出差的看法_我对于挑选背包的一些小建议
  6. php5时区,[摘]PHP5.1时区设置
  7. 字符串扩展_JAVA
  8. Vue -渐进式JavaScript框架
  9. 《JAVA与模式》之抽象工厂模式
  10. 编辑器性能测试:Atom 、VS Code、Sublime Text