源码学习之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有一个 ...
随机推荐
- BUAA软件工程个人项目
写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 [个人项目作业](<https://edu.cnblogs.com/campus/buaa/BU ...
- Solon Aop 特色开发(1)注入或手动获取配置
常规操作,先启动 Solon public class App{ public void main(String[] args){ Solon.start(App.class, args); } } ...
- [刷题] 235 Lowest Common Ancestor of a Binary Search Tree
要求 给定一棵二分搜索树和两个节点,寻找这两个节点的最近公共祖先 示例 2和8的最近公共祖先是6 2和4的最近公共祖先是2 思路 p q<node node<p q p<=node& ...
- WPS 2010 页眉下方添加下划线
我们在使用Word2010编辑文档中时,有时需要在页眉下方删除或添加一条横线.本篇经验就来介绍一下删除和添加横线的方法. 工具/原料 Word 2010 一.删除横线 1 打开Word2010 ...
- Alien 魔法:RPM 和 DEB 互转
Alien 魔法:RPM 和 DEB 互转 作者: Gabriel Cánepa 译者: LCTT joeren | 2015-08-31 10:45 评论: 6 收藏: 10 正如我确信,你们一 ...
- nginx rewite重定向详解及实例解析
静态和动态最大的区别是是否调用数据库. 什么是rewrite 将浏览器发送到服务器的请求重写,然后再返回给用户. 就是修改url,提高用户体验 rewrite的用途 80强转443 (优化用户体验) ...
- zabbix监控之自动发现/自动注册
一.自动发现 1.概述 自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法.例如,zabbix可以在你的机器上自动开始监控文件系统或者网络接口,而无需为每个文件系统或网 ...
- Spark SQL 之 RDD、DataFrame 和 Dataset 如何选择
引言 Apache Spark 2.2 以及以上版本提供的三种 API - RDD.DataFrame 和 Dataset,它们都可以实现很多相同的数据处理,它们之间的性能差异如何,在什么情况下该选用 ...
- linux中getopt的用法-(转自pengyingh)
getopt被用来解析命令行选项参数.就不用自己写东东处理argv了. #include <unistd.h> extern char *optarg; //选项的参数指针 ...
- 第8章 Shell函数的知识与实践
shell 函数常见的语法格式 function 函数名(){ return n } 简化1 function 函数名{ ... } 简化2 函数名(){ ... } ...