underscore.js 源码分析(十)
使用underscore.js 的 function 部分bind  bindall  partial  memorize  delaybind
_.bind(func, obj, *arguments)使用 bind使用 bind 的目的是将函数 func 绑定到 obj 上面去,也就是说,这时候 func 中的 this 就指向了 obj, 其中 arguments 被作为传递给 func 的参数被传入到 func 之中。实例如下
1  | function greet(home) {  | 
关于使用
bind 的函数:使用 bind 的函数使用 bind 函数接收两个参数,第一个参数表示需要进行绑定的变量,第二个参数表示传递给函数的参数。源码如下:
1  | _.bind = function(func, context) {  | 
executeBound 函数如下:1  | // 这里面 boundFunc 是需要进行绑定的函数  | 
baseCreate 函数如下:1  | let Ctor = function () {};  | 
nativeCreate 返回的是这个 Object.create() 使用 Object.create 用来实现继承的关系1  | // 使用 new 操作符的过程  | 
partial
partial(function, *arguments)局部应用一个函数填充在任意个数的 arguments。实例
1  | function add(a, b) {  | 
1  | function partial(fn) {  | 
源码分析
1  | _.partial = function(func) {  | 
executeBound 函数上面有解释,这个函数的作用是:Determines whether to execute a function as a constructor, or a normal function with the provided arguments决定是否构建一个函数作为构造函数,或者运行一个给定参数的普通函数。
memoize使用 memorize 用来缓存函数计算的结果。delay使用 delay 用来实现对于函数延迟执行,代码如下:1  | function delay(func, wait) {  | 
deferdefer(function, *arguments)使用 defer 的目的在于延迟调用 function 直到当前的调用栈被清空为止,其中 arguments 会被作为 function 的参数进行传入。类似于使用 setTimeout(function () {}, 0) 的延迟调用效果。实现的源码如下:1  | _.defer = _.partial(_.delay, _, 1);  |