/** * Perform no operation. * Stubbing args to make Flow happy without leaving useless transpiled code * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/). */ function noop(a, b, c) { }
这是一段vue2里的源码。javascript
noop,是No Operation或No Operation Performed的缩写,意为无操做。vue
在汇编语言中,NOOP指令一般用于控制时序的目的,强制内存对齐,防止流水线灾难,占据分支指令延迟),或是做为占位符以供程序的改善(或替代被移除的指令)。java
NOOP在各类语言中的例子:app
在vue源码中的这个noop无操做空函数,主要做用就是为一些函数提供默认值,避免传入undefined之类的数据致使代码出错。less
好比vue中:函数
new Watcher(vm, updateComponent, noop, { before: function before() { if (vm._isMounted && !vm._isDestroyed) { callHook(vm, 'beforeUpdate'); } } }, true /* isRenderWatcher */);
Watcher具体实现为:oop
var Watcher = function Watcher( vm, expOrFn, cb, options, isRenderWatcher ) { ... }
这里传入noop空函数的做用,就是避免在调用回调函数cb
时,程序报错致使中断(好比传入undefined,执行cb的时候就会报cb is not a function
错误)。rest
这里也能够直接使用一个无操做的匿名函数来代替noop。在vue2的源码中,共有20处使用了noop函数,若是每次都建立一个匿名函数,一个是下降了代码的可读性,另外一个是在js压缩时,这部分匿名函数是没法被压缩的,下降了代码的压缩率。code
参考资料:orm