前端面试题 ╰半橙微兮° 2022-01-19 02:55 279阅读 0赞 今天看到一份某大厂的前端面试题,自己看了看挺简单的,由于我是即将要面临找工作实习的大学生,所以想分享给大家。 1. 给String定义一个doRepate方法,该方法接受一个整数作为参数,作为字符串重复的次数,最后返回重复指定次数的字符串。 例如 console.log("g".doRepate(3)) // ggg 复制代码 我的答案: String.prototype.doRepate = function doRepate(num) { let str = ''; for (var i = 0; i < num; i++) { str += this; } return str; } console.log('a'.doRepate(5)); // aaaaa 复制代码 上面没有容错什么的还不够详细,只是提供一个简单的实现,具体的可以自己查找资料。 1. 请写出下面的代码运行的结果,并解释原理。 ar fullName = 'John'; var obj = { fullName: 'Colin', prop: { fullName: 'Adr', getFullName: function(){ return this.fullName; } } }; console.log(obj.prop.getFullName()); var test = obj.prop.getFullName; console.log(test()); 复制代码 答案: console.log(obj.prop.getFullName()); //Adr console.log(test()); //John 复制代码 原理:作用域。 obj.prop.getFullName() //this是prop test() //this是window 复制代码 1. 修复前一个问题,让最后一个输出Adr. 答案: console.log(test.call(obj.prop)); console.log(test.apply(obj.prop)); //改变this指向 复制代码 1. 考虑如下代码 var nodes = document.getElementsByTagName('li'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function click() { console.log('li' + i); }, false); } 复制代码 假设有10个li, 如果用户点击第一个和第四个会输出什么。 答案:10 10 5. 修复前一个问题,点击第一个输出0, 第二个输出1 // ES6 for (let i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function click() { console.log('li' + i); }, false); } // IIFE for (var i = 0; i < nodes.length; i++) { (function (j) { nodes[j].addEventListener('click', function click() { console.log('li' + j); }, false); })(i); } // IIFE for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', (function click(j) { return ()=>{ console.log('li' + j); }; }(i)), false); } 复制代码 1. 写出下面代码的输出结果 function printing() { console.log(1); setTimeout(function () { console.log(2); },1000); setTimeout(function () { console.log(3); },0); setTimeout(function () { console.log(4); },0); console.log(5); new Promise((resolve, reject) => { console.log(6); resolve(); }).then(function(){ console.log(7); }); } printing(); 复制代码 答案: 1 5 6 7 3 4 2 7.写出一个算法,判断一个输入值是否为质数。 function isPrime(num) { for (var i = 2; i < num; i ++ ) { if(num % i === 0){ return false; } } return true; } 复制代码 let num = 0; for (var i = 2; i < 100; i++) { if(isPrime(i)){ num ++; } } console.log(num); //25 复制代码 改进版 function isPrime(num) { // 下一句不一样,数学知识。 for (var i = 2; i <= Math.sqrt(num); i ++ ) { if(num % i === 0){ return false; } } return true; } 复制代码 增强版 function isPrime(num) { if(num === 2){ return true; }else if(num % 2 === 0){ //偶数(除了2)不是素数 return false; } for (var i = 3; i <= Math.sqrt(num); i += 2 ) { if(num % i === 0){ return false; } } return true; } 复制代码 1. 用css + html 实现一个气泡框 <div id="bubble"></div> #bubble { position: relative; height: 50px; width: 100px; margin: 200px auto; border: 1px solid black; } #bubble:after { content: ''; position: absolute; bottom: -6px; left: 15px; width: 10px; height: 10px; border: 1px solid black; border-left-color: transparent; border-top-color: transparent; transform: rotate(45deg); background-color: #fff; } 复制代码 * 这只是我个人的答案,并不完善,如有错误或不好的地方,请您指出来。 转载于:https://juejin.im/post/5c6e4bb151882562654ac762
还没有评论,来说两句吧...