/**
* 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里的源码。

noop,是No Operation或No Operation Performed的缩写,意为无操作。

在汇编语言中,NOOP指令通常用于控制时序的目的,强制内存对齐,防止流水线灾难,占据分支指令延迟),或是作为占位符以供程序的改善(或替代被移除的指令)。

NOOP在各种语言中的例子:

  • 在C语言中,分号(;)或空块({})都是NOOP。
  • jQuery中,“jQuery.noop()”函数会创建一个NOOP。
  • 在Perl中,省略号(…)可以用作NOOP。但是如果Perl尝试执行代码,则会给出未实现的异常。
  • 在Python中,“pass”语句可用作NOOP。
  • 在Visual Basic中,分号(;)表示NOOP。

在vue源码中的这个noop无操作空函数,主要作用就是为一些函数提供默认值,避免传入undefined之类的数据导致代码出错。

比如vue中:

    new Watcher(vm, updateComponent, noop, {
before: function before() {
if (vm._isMounted && !vm._isDestroyed) {
callHook(vm, 'beforeUpdate');
}
}
}, true /* isRenderWatcher */);

Watcher具体实现为:

var Watcher = function Watcher(
vm,
expOrFn,
cb,
options,
isRenderWatcher
) {
...
}

这里传入noop空函数的作用,就是避免在调用回调函数cb时,程序报错导致中断(比如传入undefined,执行cb的时候就会报cb is not a function错误)。

这里也可以直接使用一个无操作的匿名函数来代替noop。在vue2的源码中,共有20处使用了noop函数,如果每次都创建一个匿名函数,一个是降低了代码的可读性,另一个是在js压缩时,这部分匿名函数是无法被压缩的,降低了代码的压缩率。


参考资料:

最新文章

  1. 用SecureCRT连接虚拟机中的Linux系统(Ubuntu)
  2. 【Java每日一题】20161220
  3. HDU 1817Necklace of Beads(置换+Polya计数)
  4. (转) Awesome Deep Learning
  5. [Java基础]字符串
  6. java输入函数
  7. Cocos2d 学习资料推荐
  8. MongoDB高可用模式部署
  9. Java 分布式应用
  10. MongoDB的数据类型
  11. curl批量伪造数据
  12. 诺贝尔物理学奖公布:LED灯将点亮了整个21世纪
  13. php:修改NetBeans默认字体
  14. 20164322韩玉婷 -----EXP3 免杀原理与实践
  15. Zabbix监控平台3.2.4(二)深入理解zabbix
  16. PHP的特质Trait使用
  17. 199. Binary Tree Right Side View 从右侧看的节点数
  18. 信号为E时,如何让语音识别脱“网”而出?
  19. Linux 系统性能分析工具 sar
  20. Delphi根据方法名调用方法

热门文章

  1. PageHelper简单使用
  2. SpringBoot系列——Activiti7工作流引擎
  3. Beta——事后分析
  4. opencv——轮廓发现与轮廓(二值图像)分析
  5. (原创)高DPI适配经验系列:(四)高DPI适配示例
  6. [c++] 二级指针的原理
  7. [Windows] 屏幕截图 - FastStone Capture(FSCapture) v9.4 飞扬时空汉化绿色版(官方地址) 【清晰好用 已验证】
  8. Ansible_实施处理程序
  9. IT菜鸟之BIOS和VT
  10. 030. Python装饰器