I didn’t expect that the code was successfully tested once.~~It’s just FF, modified to support IE. Because IE does not recognize function expressions.
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. > coroutine = cofn;
cofn_this = cothis; 🎜> Array.prototype.forEach = new Iterator(function () {
for (var i = 0; i < this.length; i ) {
. = window.alert;
var A = [1,2,3,4,5];
A.forEach(function(it){
} this.display(it)
}, this );
There is a trick:
fn = eval(fn.toString())
Used to bind the reference in fn to the current context, so that the yield in fn will refer to the yield function we defined.
Note that if you need to access other this context in the coroutine, you need to pass it to the iterator, such as example.