js 代码#*__PURE__* 是什么意思?

JavaScript011

js 代码#*__PURE__* 是什么意思?,第1张

纯函数的意思,也就是webpack压缩(tree-shaking摇树)的时候,如果看到/*#__PURE__*/这个标志,说明他是纯函数,如果没有调用它,会直接把它删除了,减少代码体积

其实我也是自学的js

一开始也遇到了同样的问题

别人也给解释了很多,但根本听不懂

前面两个仁兄回答的非常好,简单明了

但这是在我明白这些名词以后看,看得非常清晰

我想,这些解释在我明白以前 是看不懂的

我来解释一下吧:

函数:

js里凡是带有function的都可以叫做函数,函数包括定义函数和执行函数,函数的存在就是为了实现你想干什么,无论你想干什么,都可以先定义一个函数,然后在你想运行的时候运行它。

事件:

你可以简单理解为触发函数的事情,比如你想在点击一个按钮时触发一个函数,那么这个点击就是事件,至于js都有什么事件,你可以查一查,每一个事件都有一个名字(比如点击事件就是onclick)

方法:

其实方法也是函数,只不过对象里的函数就叫方法了。(下面讲对象)

对象:

这个就不太好理解了,我理解他用了N久,直到有一天突然明白了,才发现其实没那么复杂。

对象你可以简单的理解为一个大仓库,里面有各种资源(各种方法——也就是函数,各种定义了这个仓库的属性——比如这个仓库是干什么用的啊)。好了,现在你有一个满载资源的仓库了,当你想做某些事件的时候,你想到了这个仓库里有你想要的资源,那么你就可以调用这个仓库里的资源了,也就是调用这个对象里的方法了。

那你可能要问了,我不用对象也能实现我的目的

其实初学的时候是这样的,但当程序越来越多,越来越复杂的时候,就会用到这些了。

不明白就追问吧,纯手写的。

immutable,副作用,纯函数关键词解释:

js 中的对象一般是可变的,因为使用了引用赋值,虽然可以节约内存,但是会有一些隐患。一般做法使用浅拷贝和深拷贝来避免修改,但是这样会造成 CPU 和内存浪费。

为了解决这个问题,出现了 immutable.js 和 immer

immutable.js 实现原理: Persistent Data Structure (持久化数据结构)。

内部实现了一套 Persistent Data Structure,还有很多易用的数据类型像 Collection 、 List 、 Map 、 Set 、 Record 、 Seq 。有非常全面的 map 、 filter 、 groupBy 、 reduce``find 函数式操作方法。同时 API 也尽量与 Object 或 Array 类似。

缺点:

和 redux 的配合使用,redux 简化了 Flux 中多个 store 的概念,只有一个 store,数据操作通过 reducer 使用。reducer 就是要接受一个纯函数。

mobx 作者写的一个 immutable 库,核心实现利用 es6 的 proxy。

immer 使用原生数据结构的 api,而不像 immutable-js 转化为内置对象的 api。

学习成本低,就是把之前的操作放置到 produce 函数的第二参数函数中去执行。

原理:使用了一个 ES6 的新特性 Proxy 对象。深层嵌套对象的结构化共享的处理

proxy 具体可以看 Proxy

Proxy 无法 polyfill,所以 immer 在不支持 Proxy 的环境中,使用 Object.defineProperty 来进行一个兼容。

immer 维护一份 state 在内部,劫持所有操作,内部来判断是否有变化从而最终决定如何返回。