myJS
  • 说明
  • js核心
  • 函数式编程
    • 链式优化
    • 你真的知道函数吗?
    • 纯函数
    • 函数柯里化
  • 内存的那些事
    • 栈内存和堆内存
    • 垃圾回收机制-GC
    • 闭包恍然大悟
      • 运行时的词法作用域
    • 数据结构基于内存
    • 怎样用chrome devtool 查看内存泄漏状况
    • dom元素的内存泄漏例子讲解
  • 网络请求
    • 原生js请求
    • https了解一下
    • 跨域方法
    • 你不知道的浏览器页面渲染机制
    • 聊点 TCP 干货(1)
  • 异步编程
    • await 和 async
  • 服务器
    • nginx
  • 模块化编程
    • commonJs模块
    • ES模块
    • AMD模块
    • CMD模块
    • module.exports与export那些事儿
  • webpack
    • 环境变量的使用
      • node配置
      • webapck配置
    • postcss处理css
    • webpack-dev-server
    • HMR热更新原理
    • babel配置
      • 转化es6
      • Runtime transform/runtime
    • extract-text-webpack-plugin
    • css加载
    • 打包优化
    • 第三方插件加载中
    • 热更新踩坑
    • typescript+node
    • 代码分割的意思
  • CMD命令行
    • 文件的增删改查
  • node
    • path模块
    • node 文件路径的分析
  • js一些资源库
  • node毛皮
    • cnpm 淘宝镜像
  • 浏览器调试
    • js调试
    • 浏览器同源政策及其规避方法
  • 好好理解变量
    • this指向
    • 作用域
  • 专有名词理解
    • MVC
  • postman
    • 环境变量
  • 树的遍历和操作
    • 二叉树
  • 关于Date你要知道的是?
    • 获取某个月的天数
    • js 日期详解
  • Dom 对象
  • 回调函数
    • 语法。为什么要用
  • class 怎样用好类
    • 用类直接创建对象关联到变量
  • js引擎
  • git操作
    • .gitignore忽略文件
    • 删除操作
  • table学习
    • 表格样式
    • 固定列和行
  • 拖拽
    • 目标容器
    • 狐火的拖拽就是不一样
  • 正则学习
  • 算法
    • 数据结构
  • js小技巧
  • indexDB
  • Matrix 矩阵
Powered by GitBook
On this page
  • 原文地址:https://juejin.im/post/5a92a12f6fb9a063543c4c2b#comment
  • 在编程的时候。一般都没怎么写纯函数,因为
  • 优点也很多:

Was this helpful?

  1. 函数式编程

纯函数

原文地址:https://juejin.im/post/5a92a12f6fb9a063543c4c2b#comment

之前在学习redux的时候有接触到纯函数这个概念,也没有仔细的研究。现在对这个概念还是模棱两可的。

纯函数:函数执行后的结果只与传入的参数有关,并且不受系统环境变化、调用环境与次序的影响,网上说也就是函数执行时没有副作用,通俗的讲是,同样的操作,得到的一定是同样的结果。通过下面的例子来理解这句话的意思

  • 不管有没有参数,何时调用,fun1调用后结果都是一样的。

function fun1(a,b){

   return a+b ;
};
  • 如下不是纯函数,因为函数里引用到了全局变量a ,所以fun2的执行结果受到全局变量a的影响,a可能会变化!,要是把a当参数传入函数则是纯函数。

var a =1;
function fun2(b){

  return a+b

}
  • 当传入的参数是对象,这时参数是这个对象的引用地址,当对象改变的时候,函数的执行结果还是变化了,虽然是传入的是同一个参数,这就是系统变化的时候。

var obj = {name:"test"};

function fun1(a,b){

    retrun a.name+b;
}

var str1 = fun1(obj,'age');
obj.name = "change";
var str1 =fun1(obj,'age');
  • 当在函数里获取dom节点的时候,也是会产生副作用的。如果这个dom节点发生变化,函数的结果也不一样了。

  • 在在函数里依赖别的函数,这样当依赖的函数功能发生变化的时候,函数的执行结果也不一样了。

在编程的时候。一般都没怎么写纯函数,因为

  1. 这样传入的参数就变得很多了。

  2. 功能分的更细了,写的方法更多了

优点也很多:

  1. 复用性很高,不需要考虑执行环境,也就是上下文。

  2. 结果很明确

  3. 对执行的顺序没有要求

  4. 同样的输入,必然是同样的结果。

Previous你真的知道函数吗?Next函数柯里化

Last updated 6 years ago

Was this helpful?