源码学习之noop
/**
   * 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压缩时,这部分匿名函数是无法被压缩的,降低了代码的压缩率。
参考资料:
源码学习之noop的更多相关文章
- Underscore.js 源码学习笔记(下)
		上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ... 
- Vue源码学习1——Vue构造函数
		Vue源码学习1--Vue构造函数 这是我第一次正式阅读大型框架源码,刚开始的时候完全不知道该如何入手.Vue源码clone下来之后这么多文件夹,Vue的这么多方法和概念都在哪,完全没有头绪.现在也只 ... 
- Vue2.1.7源码学习
		原本文章的名字叫做<源码解析>,不过后来想想,还是用“源码学习”来的合适一点,在没有彻底掌握源码中的每一个字母之前,“解析”就有点标题党了.建议在看这篇文章之前,最好打开2.1.7的源码对 ... 
- Vue3全局APi解析-源码学习
		本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ... 
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
		2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ... 
- jQuery源码学习感想
		还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ... 
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
		前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ... 
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
		前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ... 
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
		前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ... 
随机推荐
- "mysql第一次查询很慢,以后就很快"的解决方案
			背景 有个项目使用的mysql数据库,第一次查询很慢,大约15s左右出结果,再次查询就很快了. 分析 后面变快的原因是mysql有缓存机制,但是过上一段时间不使用缓存会过期,我个人测了一下2~3分钟一 ... 
- SpringBoot系列——自定义统一异常处理
			前言 springboot内置的/error错误页面并不一定适用我们的项目,这时候就需要进行自定义统一异常处理,本文记录springboot进行自定义统一异常处理. 1.使用@ControllerAd ... 
- Convert character array to string in MATLAB
			Matlab提取特征值是经常要读取多个图片文件,把文件名保存在数组中后再读取会出错.从stackoverflow中找到如下解决方法: I've a M by N matrix, each cell c ... 
- 3D教育类小图标_三维立体学习类icon图标素材
			3D教育类小图标_三维立体学习类icon图标素材 
- Ubuntu 20.04 配置多网卡链路聚合
			Ubuntu 20.04 配置多网卡链路聚合 多网卡IP配置 首先查看网卡信息 root@it:~# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65 ... 
- Centos6下通过 oprofile分析CPU性能
			Centos6下通过 oprofile分析CPU性能 2014-01-18 10:55:15 bobpen 阅读数 2218更多 分类专栏: linux 版权声明:本文为博主原创文章,遵循CC 4 ... 
- Linux_配置主DNS服务(基础)
			[RHEL8]-DNSserver:[Centos7.4]-DNSclient !!!测试环境我们首关闭防火墙和selinux(DNSserver和DNSclient都需要) [root@localh ... 
- Linux_权限管理理论概述
			一.权限定义 1.文件权限作用的对象 owner :属主 - u group :属组 - g other :其他人 - o 2.文件的三种权限 //针对文件的权限 r 可读 可以使用cat命令查看文件 ... 
- 【Java】Jackson解析xml的坑
			为了获取xml数据,在spring mvc中针对 @ResponseBody配置了jackson. 刚用的时候内心是狂喜的,终于不用自己解析了---- but----------还是有坑的-- 坑一 ... 
- unity项目字符串转为Vector3和Quaternion
			运用环境:一般在读取csv表格的数据时是string类型转为Vector3或者Quaternion类型 字符串格式:x,x,x /x,x,x,x (英文逗号) 方法: /// <summary& ... 
