/**
* 1. 设计函数:f(a,b) = f(a)(b) = a + b
* 因为:result1 = f(a) = function(b){...}
* 因此:result1(b) = a + b
*/
function f(a) {
if(arguments.length==1) {
return function(b) {
return a + b
}
}else {
return a + arguments[1];
}
}
console.log(f(2)(3));
console.log(f(2,3));
/**
* 块级作用域 for 循环中var 的改写
* 闭包只能取得包含函数的最后一个值
*/
(function(){
for(var i = 0; i<10; i++){
(function(j){
setTimeout(function(){
console.log(j);
},0);
})(i)
}
})()
/**
* this 指的是执行上下文环境
*
*
*/
/**
* 浅拷贝
*/
var obj = { a:1, arr: [2,3] };
var shallowObj = shallowCopy(obj);
function shallowCopy(src) {
var dst = {};
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
dst[prop] = src[prop];
}
}
return dst;
}
/**
* 深拷贝
*/
var cloneObj = function(obj){
var str, newobj = obj.constructor === Array ? [] : {};
if(typeof obj !== 'object'){
return;
} else if(window.JSON){
str = JSON.stringify(obj), //系列化对象
newobj = JSON.parse(str); //还原
} else {
for(var i in obj){
newobj[i] = typeof obj[i] === 'object' ?
cloneObj(obj[i]) : obj[i];
}
}
return newobj;
};
/**
* *数组合并
*/
//利用concat
function concat(arr1, arr2) {
return arr1.concat(arr2);
}
//利用slice+push.apply
function concat(arr1, arr2) {
var newArr=arr1.slice(0);
[].push.apply(newArr, arr2);
return newArr;
}
//利用slice+push
function concat(arr1, arr2) {
var newArr=arr1.slice(0);
for(var i=0;i<arr2.length;i++){
newArr.push(arr2[i]);
}
return newArr;
}
//普通的迭代拷贝
function concat(arr1, arr2) {
var newArr=[];
for(var i=0;i<arr1.length;i++){
newArr.push(arr1[i]);
}
for(var j=0;j<arr2.length;j++){
newArr.push(arr2[j]);
}
return newArr;
}
网友评论