/** * 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