美文网首页技术干货
今天看到的骚操作(1)- 或运算符和闭包

今天看到的骚操作(1)- 或运算符和闭包

作者: 剑来___ | 来源:发表于2018-12-13 14:50 被阅读15次

今天在网上看到一段代码,感觉很惊奇,因为它涉及到很多的知识点,有闭包,有||运算符的神奇使用等等。
先上代码:

var memoize = function(f) {
  var cache = {};

  return function() {
    var arg_str = JSON.stringify(arguments);
    cache[arg_str] = cache[arg_str] || f.apply(f, arguments);
    return cache[arg_str];
  };
};
var squareNumber  = memoize(function(x){ return x*x; });

squareNumber(4);
//=> 16

squareNumber(4); // 从缓存中读取输入值为 4 的结果
//=> 16

squareNumber(5);
//=> 25

squareNumber(5); // 从缓存中读取输入值为 5 的结果
//=> 25

这是今天看JavaScript函数式编程的一本gitbook上找到的https://llh911001.gitbooks.io/mostly-adequate-guide-chinese/content/ch3.html#%E8%BF%BD%E6%B1%82%E2%80%9C%E7%BA%AF%E2%80%9D%E7%9A%84%E7%90%86%E7%94%B1
这一章里面原意是讲纯函数的一些实现方式和有点,但是看到这段代码,我感觉笔者的代码非常常简单,虽然这里面涉及到了闭包,以及一些逻辑运算符的骚操作,但是一眼看去还是知道作者想要实现一些什么的。

代码本意

这一段代码是讲两数相乘,但是会把乘过的数保存在一个叫cache的对象里,比如你已经计算过5 * 5了,他会把这个计算表达式和结果以键值对的方式存储在这个cache对象中,但是这个cache只是函数里的一个变量,无法全局保存,这里他使用到了闭包。使其在函数作用域结束的时候不会被系统销毁。

可以学习的点

  1. 优化,以前再刷算法题的时候有过这样的场景,就是在做重复计算的时候,用什么方法可以减少计算时间,这里的缓存,可以用作这一方法。
  2. || 运算的神奇作用,以前很喜欢用&&做短路运算,也就是&&之前的表达式计算为false的时候,会直接返回,并不会计算之后的表达式,也是一种代码优化。而||,我查了下,总结来说就是返回第一个真值,如果||左边的表达式是真的话,那右边的计算就不会进行了
var temp = 5 || ( console.log('计算了右值') )
console.log(temp); 
// 控制台打印只显示5

总结

|| 返回第一个真值,&&返回第一个假值
js里边能判断为假值的有以下:

  • null;
  • NaN;
  • 0;
  • 空字符串("");
  • undefined

相关文章

  • 今天看到的骚操作(1)- 或运算符和闭包

    今天在网上看到一段代码,感觉很惊奇,因为它涉及到很多的知识点,有闭包,有||运算符的神奇使用等等。先上代码: 这是...

  • 关于闭包

    最终实例效果 Swift闭包的作用和OC中的block一致1、保存代码2、做耗时操作 1、闭包 写法 闭包作为函数...

  • 阮一峰JavaScript 标准参考教程(alpha)阅读笔记-

    当前进度: 2.8运算符 1.闭包 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多...

  • python之闭包与装饰器

    1 闭包 维基百科给出的解析:闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭...

  • 闭包,定时器

    问题 1.什么是闭包? 有什么作用 闭包(英语:Closure),又称词法闭包(Lexical Closure)或...

  • Swift - 区间运算符的用法(... 和 ..<)

    区间运算符可以用来表示两个操作数之间的范围集合。 1.闭区间运算符: a...b 2.半闭区间运算符: a..

  • swift(闭包)

    定义闭包属性 或 或直接构建 闭包函数 调用 逃逸闭包(@escaping) 调用

  • [flutter]1、基本语法

    1、number 2、string 3、list 4、map 5、运算符 6、函数 7、闭包

  • swift 界面之间传值

    1、闭包 从A页面进入B页面,B页面有操作需要更新或传值到A页面 首先你需要在B页面定义一个闭包类型的变量 在A页...

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

网友评论

    本文标题:今天看到的骚操作(1)- 或运算符和闭包

    本文链接:https://www.haomeiwen.com/subject/wgzvhqtx.html