前端面试题

来源:互联网 发布:殷嘉恩 let it go 编辑:程序博客网 时间:2024/06/11 04:19

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插入到bodydocument.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=0http://product.m.dangdang.com/1181352912.html?https://h5.m.taobao.com/guang/item.html?spm=a310p.7403370.19980966http://item.jd.com/1903997.htmlhttp://show.jd.com.cn/1903997.htmlhttp://m.jd.com.tw/1903997.htmlhttps://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);