这是具体的 函数代码: var fs = require(‘fs’); var Thunk = function(fn) { return function() { var args = Array.prototype.slice.call(arguments); return function(callback) { args.push(callback); console.log(’================================’) console.log(this) console.log(’================================’) ** return fn.apply(this,args);** }; }; };
var readFileThunk = Thunk(fs.readFile); readFileThunk(’./index.js’,‘utf8’)(function(err, data) { console.log(data); }) 打印的this是undefined, 'return fn.apply(this,args) ’ 这句为什么这样写,或者它等同于什么?
Function.prototype.apply
=> 每个函数都apply
方法;call
同样的。
这两个方法的意思跟字面一样,就是调用该函数。
- 第一个参数决定调用者,即传递函数内
this
所指向的对象,在需要绑定上下文(context)的时候就显得很有用。 - 第二个参数就是实际参数列表了,不同的是
call
需要挨个传入参数,而apply则可以以数组的形式传入,故而此处:fn.apply(this, args)
伪数组arguments
被[].slice
处理成了Array
类型的args