参考: ES标准入门 page361
问题:X+5 何时求值,有两种方式
var x = 1function f(m) {return m*2}f(x+5)
1. 传值调用(call by value)
进入函数体前,就计算出x+5的值,然后将其传入函数f(C/JavaScript语言采用的方式)
缺点: 如果函数体内部,没有用到该参数,造成性能损失。
2. 传名调用 (call by name)
2.1 实现
将参数放到一个临时函数中,再将这个函数传入函数体。————临时函数被称之 Thunk 函数
var thunk = function(){return x + 5}funtion f(thunk) {return thunk() * 2}
3. JS语言中thunk函数定义
js是传值调用,故在js语言环境中,thunk函数含义有所不同。
其替换的不是表达式,而是多参数,将其替换成一个只接受回调函数作为参数的单参数函数。
// 正常版本(多参数版本)fs.readFile(filename,callback)// thunk版本(单参数)var Thunk = function(filename){return function(callback) {return fs.readFile(filename,callback)}}var readFileThunk = Thunk(fileName)readFileThunk(callback)
thunk函数在generator函数实现异步操作流程管理非常有用
