深度克隆
深层克隆可以保证当源数据发生改动时,克隆后的数据不会根据源数据的改动发生改动
// 遍历对象 for(var prop in obj)// 1.判断是不是原始值 typeof() object// 2.判断是数组还是对象 instanceof toString constructor// 3.建立相应的数组与对象// 递归function deepClong(orgin, target) {var target = target || {};var toStr = Object.prototype.toString,arrStr = "[object Array]";for (var prop in orgin) {//判断是否为原型链上的if (orgin.hasOwnProperty(prop)) {// 判断是否为null 且 是否为对象if (orgin[prop] !== null && typeof(orgin[prop]) == 'object') {target[prop] = toStr.call(orgin[prop]) == arrStr ? [] : {};deepClong(orgin[prop], target[prop]); //递归} else {target[prop] = orgin[prop]; //递归出口}}}return target;}
袁老师的克隆
function objClone (obj,deep){if(Array.isArray(obj)){if(deep){var newArr = [];for(var i = 0 ; i < obj.length ; i++){newArr.push(objClone(obj[i],deep))}return newArr}else{return obj.slice()}return newArr;}else if( typeof obj === 'object'){var newObj = {};for(var prop in obj){if(deep){newObj[prop] = objClone(obj[prop],deep)}else{newObj[prop] =obj[prop];}}return newObj;}else{return obj}}
纯函数
纯函数不依赖,修改器作用域之外的变量的函数
function add(num1,num2){return num1 + num2;}这就是最简易的纯函数
不是纯函数就像克隆中,源数据改动,其函数内的也跟着改动
