当前位置: 首页 > news >正文

室内设计师联盟论坛北京seo执行

室内设计师联盟论坛,北京seo执行,珠海网站上排名,手机站点Thunck函数的含义 编译器的传名调用实现,往往是将参数放到一个临时函数之中,再将这个临时函数传入函数体。这个临时函数就叫做Thunk函数。 function f(m){return m*2; } f(x5); //等同于 var thunk function(){return x5; }; function f(thunk){return …

Thunck函数的含义

编译器的传名调用实现,往往是将参数放到一个临时函数之中,再将这个临时函数传入函数体。这个临时函数就叫做Thunk函数。

function f(m){return m*2;
}
f(x+5);
//等同于
var thunk = function(){return x+5;
};
function f(thunk){return thunk()*2;
}

上面代码中,函数f的参数x+5被一个函数替换了。凡是用到原参数的地方,对Thunk函数求值即可。
这就是thunk函数的定义,它是传名调用的一种实现策略,用来替换某个表达式。

JavaScript语言的Thunk函数

JavaScript语言是传值调用,它的Thunck函数含义有所不同。在JavaScript语言中,Thunk函数替换的不是表达式,而是多参数函数,将其替换成一个只接受回调函数作为参数的单参数函数。

//正常版本的readFile(多参数版本)
fs.readFile(fileName,callback);
//Thunk版本的readFile(单参数版本);
var Thunk = function(fileName){return function(callback){return fs.readFile(fileName,callback);};
};
var readFileThunk = Thunk(fileName);
readFileThunk(callback);

上面代码中,fs模块的readFile方法是一个错参数函数,两个参数分别为文件名和回调函数。经过转换器处理,它变成了一个但参数函数,只接受回调函数作为参数。这个单参数版本,就叫做Thunk函数。
任何函数,只要参数有回调函数,就能写成Thunk函数的形式。下面是一个简单的Thunk函数转换器。

//ES5版本
var Thunk = function(fn){return function(){var args = Array.Prototype.slice.call(arguments);return function(callback){args.push(callback);return fn.apply(this,args);}};
};
//ES6版本
const Thunk = function(fn){return function(...args){return function(callback){return fn.call(this,...args,callback);}};
};
//使用上面的转化器,生生fs.readFile的Thunk函数。
var readFileThunk = Thunk(fs.readFile);
readFileThunk(fileA)(callback)

Thunkify模块

生产环境的转换器,建议使用Thunkify模块。
首先是安装。

$ npm install thunkify

使用方式如下。

var thunkify = require('thunkify');
var fs = require('fs');
var read = thunkify(fs.readFile);
read('package.json')(function(err,str){//...
})

Thunkify的源码与上面的简单的转换器非常像。

function thunkfiy(fn){return function(){var args = new Array(arguments.length);var ctx = this;for(var i=0;i<args.length;++i){args[i] = arguments[i];}return function(done){var called;args.push(function(){if(called) return;called = true;done.apply(null,arguments);});try{fn.apply(ctx,args);}catch(err){done(err);}}}
}

它的源码主要多了一个检查机制,变量called确保回调函数只运行一次,请看下面的例子。

function f(a,b,callback){var sum = a+b;callback(sum);callback(sum);
}
var ft = thunkify(f);
var print = console.log.bind(console);
ft(1,2)(print);
//上面代码中,由于thunkify只允许回调函数执行一次,所以只输出一行结果。
http://www.lbrq.cn/news/2587951.html

相关文章:

  • 南宁有多少家网站建设推广的公司陕西seo主管
  • 企业推广视频优化公司
  • 网站开发公司有哪些t和p在一起怎么做网站
  • 宝安做棋牌网站建设哪家服务好网络推广应该怎么做啊
  • 长沙开福区专业制作网站怎样做一个网页
  • 做好网站建设的重要性cms
  • 企业官网型网站模板下载做灰色词seo靠谱
  • 资深网站企业网站的作用有哪些
  • 合肥置地广场做网站的公司优化服务
  • 个人主页网站制作教程电话号码宣传广告
  • 泰和县城乡建设局网站网站推广服务报价表
  • 手机网站快速建站搜索网站
  • wordpress代码编辑插件seo描述是什么
  • 海外网站如何做用户实名认证对网站和网页的认识
  • 凡科网站内容怎么做效果好自己代理一款手游需要多少钱
  • 个人网站建设设计google搜索引擎下载
  • 做网站联系海口seo快速排名优化
  • 个人网站备案限制八百客crm登录入口
  • html5企业网站开发产品推广
  • wordpress移动端导航百度seo软件曝光行者seo
  • 怎么找做网站平台公司龙岗网站建设公司
  • 江阴做网站哪家好百度关键词排名点击器
  • 庞各庄网站建设公司想做游戏推广怎么找游戏公司
  • 官网网站设计网站ui设计
  • 做全网影视网站的风险app注册推广
  • 四方坪网站建设代写软文公司
  • 单页网站作用是什么新的营销方式有哪些
  • 深圳市建设科技促进中心网站seo网站优化软件
  • 动画设计师是干什么的seo包年优化费用
  • 网站着陆页有多少个今日头条官网登录入口
  • openeuler离线安装软件
  • C++入门自学Day6-- C++模版
  • [特殊字符]️ 整个键盘控制无人机系统框架
  • Android工程命令行打包并自动生成签名Apk
  • Spring Boot + ShardingSphere 分库分表实战
  • 【图像处理基石】如何使用deepseek进行图像质量的分析?