var test = (function(a) {
this.a = a;
return function(b) {
return this.a + b;
}
} (function(a, b) {
return a;
}(1, 2)));
console.log(test(4));
// 输出5 自执行函数和闭包 (function(a, b) { return a;}(1, 2)) 返回值1,作为参数传入function(b)
例子2:实现sum(2,3)===sum(2)(3)==5
function sum(x,y) {
if(y!=undefined) {
return x+y
} else {
return function(sec) {
return x+ sec;
}
}
}
或者function sum() {
var num = arguments[0];
if(arguments.length === 2) {
return arguments[0] + arguments[1]
} else {
return function(sec) {
return num + sec;
}
}
}
2.有一个长度未知的数组a,如果它的长度为0就把数字1添加到数组里面,否则按照先进先出的队列规则让第一个元素出队。
a.length === 0 ? a.push(1) : a.shift();
3.请把<ul><li>第1行</li><li>第2行</li>...</ul>(ul之间有10个li元素)插入body里面,注意:需要考虑到性能问题。
var lis = "",
ul = document.createElement("ul");
//把li以字符串形式生成
for(var i = 1; i <= 10; i++) {
lis += "<li>第" + i + "行</li>";
}
// 最后通过innerHTML插入ul里面
ul.innerHTML = lis;
//这里才操作dom,把ul插入到body
document.body.appendChild(ul);
4.不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标。
var a = Array(100).join(",").split(",").map(function(item, index) {
return index;
});
这个解法充满了曲折啊!先是创建一个数组,然后,通过join方法把它转成字符串,然后,再通过split方法把字符串转成数组,这时候,它就拥有100个值为空的元素了,然后,再通过map函数,改变这些元素的值即可。6.有一个长度为100的数组,请以优雅的方式求出该数组的前10个元素之和
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
sum = 0;
sum = a.slice(0, 10).reduce(function(pre, current) {
return pre + current;
});
console.log(sum); //55
7. 二级域名正则表达式 http://abc.9game.cn/sname/view 中的9game.cn如下是直接查找二级域名并匹配
var text = `http://w.nnn.cn/ http://www.meilishuo.top/
http://m.meilishuo.com/share/item_detail/3924101135?tab=0
http://product.m.dangdang.com/1181352912.html?
https://h5.m.taobao.com/guang/item.html?spm=a310p.7403370.19980966
http://item.jd.com/1903997.html
http://show.jd.com.cn/1903997.html
http://m.jd.com.tw/1903997.html
https://detail.m.tmall.com/item.htm?spm=a222m.7628550.0.0`;
var urls = text.split(/\s/g);
var domains = urls.map(url => url.match(/((?:\w+\.){2}(?:cn|top|com\.cn|com\.tw|com))/)[1]);
console.log(domains);
8.优先级:&&的优先级高于||
短路:左边的操作可以得出结果,右边的操作可以忽略
?:为右关联