日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript实现yield

發布時間:2025/3/21 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript实现yield 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

沒想到代碼一次測試成功.~~只不過是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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。