- 实现一个function sum达到一下目的:
sum(1,2,3,4,5).valueOf(); // 15
sum(1,2,3,4)(5).valueOf(); // 15
sum(1,2,3)(4)(5).valueOf(); // 15
sum(1,2)(3)(4)(5).valueOf(); // 15
sum(1,2)(3,4)(5).valueOf(); // 15
答案:
function sum() {
let that = this;
this.arr = [...arguments]; //转换为真实数组
function _sum() {//内部函数,一个闭包
that.arr.push(...arguments);
return _sum;
}
_sum.valueOf = function () {
//return eval(that.arr.join('+'))
return that.arr.reduce(function(x,y){
return x+y;
})
}
return _sum;
}
console.log(sum(1, 2, 3, 4, 5).valueOf());
console.log(sum(1, 2, 3, 4)(5).valueOf());
console.log(sum(1, 2, 3)(4)(5).valueOf());
console.log(sum(1, 2)(3)(4)(5).valueOf());
console.log(sum(1, 2)(3, 4)(5).valueOf());
- 实现一个function,使用正则匹配获取当前浏览器的多参数,参数可以是一个或者多个如:
http://www.sodacar.com/vehicles?car=13242&station=83212jde 返回: {car: 13242, station: 83212jde}
http://www.sodacar.com/vehicles?car=13242&station=83212jde&lat=102.21301&lng=31.22345 返回: {car: 13242, station: 83212jde, lat: 102.21301, lng: 31.22345}
答案:
function getUrlParam() {
var match,
search = /([^&=]+)=?([^&]*)/g,
//query = window.location.search.substring(1);
query="station=83212jde&lat=102.21301&lng=31.22345";//模拟数据
urlParams = {};
while (match = search.exec(query)) {//检索字段和正则是否匹配,返回数组
urlParams[match[1]] = match[2];
}
return urlParams;
}
getUrlParam();
//{station: "83212jde", lat: "102.21301", lng: "31.22345"}