Open TokenYangForever opened 6 years ago
slice
splice
var xs = [1,2,3,4,5]; // 纯的 xs.slice(0,3); //=> [1,2,3]
xs.slice(0,3); //=> [1,2,3]
// 不纯的 xs.splice(0,3); //=> [1,2,3]
xs.splice(0,3); //=> [4,5]
xs.splice(0,3); //=> []
* 纯函数的还有一个特点,就是自给自足,不依赖于外部环境,也就是**不会去引用其他作用域的变量,只会使用传入的参数以及内部作用域的变量**。下面再来看一个例子,假如我们要定义一个函数,用来判断是否成年了(age大于18):
// 不纯的,引用了外部变量 let adultAge = 21; const checkAge = function(age) { return age >= adultAge; }; // 纯的 const checkAge = function(age) { let adultAge = 21; return age >= adultAge; };
* 所以推荐使用纯函数来避免产生副作用,副作用的定义为:在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互。 #### 柯里化 * 概念:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数
一等公民
纯函数
slice
和splice
方法,他们作用很相似,slice符合纯函数的定义,因为它不会改变原数组的值,输入相同的参数,一定会得到相同的返回值。而splice在调用时就永久的改变了原数组的值(产生副作用了!)。xs.slice(0,3); //=> [1,2,3]
xs.slice(0,3); //=> [1,2,3]
// 不纯的 xs.splice(0,3); //=> [1,2,3]
xs.splice(0,3); //=> [4,5]
xs.splice(0,3); //=> []
// 不纯的,引用了外部变量 let adultAge = 21; const checkAge = function(age) { return age >= adultAge; }; // 纯的 const checkAge = function(age) { let adultAge = 21; return age >= adultAge; };