一开始也遇到了同样的问题
别人也给解释了很多,但根本听不懂
前面两个仁兄回答的非常好,简单明了
但这是在我明白这些名词以后看,看得非常清晰
我想,这些解释在我明白以前 是看不懂的
我来解释一下吧:
函数:
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 在内部,劫持所有操作,内部来判断是否有变化从而最终决定如何返回。