前端面试题和答案

1.执行以下代码后

var num = 1;
var obj = {
num: 8,
fun: (function () {console.log(this)
this.num *= 2;
return function () {
this.num *= 2;
}
})()
}
var ooo=obj.fun;
obj.fun();
obj.fun();

最后num和this.num的值?

答案:2和64

2. 最后文字的显示颜色?

<html>
<head>
<title></title>
<style>
#color a {
color:red;
}
.color a {
color:yellow
}
h1 a {
color:blue
}
a {
color:orange
}
</style>
</head>
<body>
<div id="color">
<p class="color">
<h1><a>文字颜色</a></h1>
</p>
</div>
</body>
</html>

答案:红色

3.输出到控制台结果

function fun1() { console.log("aa") };
function fun2(){
return fun1;
function fun1(){
console.log("bb")
}
}
fun2()(); 

答案:"bb"

 4. 有两个无序数组,infoPart和infoTotal,实现将infoTotal里的 name信息赋值到infoPart里面

 1 var infoPart = new Array(
 2     { id: 223 },
 3     { id: 444 },
 4     { id: 220 },
 5     { id: 399 },
 6     { id: 320 }
 7 );
 8 var infoTotal = new Array(
 9     { id: 220, name: "ff", age: 31 },
10     { id: 444, name: "rr", age: 30 },
11     { id: 333, name: "kk", age: 25 },
12     { id: 320, name: "tt", age: 34 },
13     { id: 223, name: "yy", age: 32 }
14 );

注意上面两行红字

实现方式1

1 //实现方式1
2 for (var i = 0; i<infoPart.length; i++) {
3     if( infoTotal.find(function(a){return a.id==infoPart[i].id}))
4         infoPart[i].name= infoTotal.find(function(a){return a.id==infoPart[i].id}).name;
5 }

实现方式2

 1 //实现方式2
 2 infoPart.sort((a, b) =>{
 3     return a.id > b.id;
 4 })
 5 infoTotal.sort((a, b) => {
 6     return a.id > b.id;
 7 })
 8 var flag=true;
 9 var i=j=0;
10 while(flag){
11     if(infoPart[i]){
12         if(infoPart[i].id==infoTotal[j].id){
13             infoPart[i].name=infoTotal[j].name;
14             i++;
15             j++
16         }else if(infoPart[i].id<infoTotal[j].id)
17             i++;
18         else
19             j++;
20     }else{
21         break;
22     }
23 }

实现方式3,就是双层遍历,这里不再具体写代码了

 5.实现一个距离未来某一天倒计时的时钟 

 1 function timeBack(){  
 2     var endDay=new Date("2020/9/11 0:0:0");  
 3     var today=new Date();  
 4     var end=endDay.getTime();  
 5     var now=today.getTime();  
 6     var ms=end-now;  
 7     var days=Math.floor(ms/(1000*60*60*24));  
 8     var hours=Math.floor(ms%(1000*60*60*24)/(1000*60*60));  
 9     var minutes=Math.floor(ms%(1000*60*60)/(1000*60));  
10     var seconds=Math.floor(ms%(1000*60)/1000);  
11     document.getElementById("p1").innerHTML="距离2020/9/11:"+days+"天"+hours+"时"+minutes+"分"+seconds+"秒"; 12 setTimeout(timeBack, 1000); 13 };

 

null和undefined的区别?

区别:

下面的这些结果分别是多少?

void(0)=?  

Boolean('')=?  Boolean(' ')=?  Boolean('false')=?  Boolean(false)=?

Number('100px')=?  parseInt('100px')=?

答案:

void(0)=undefined  

Boolean('')=false  Boolean(' ')=true  Boolean('false')=true  Boolean(false)=false

Number('100px')=NaN  parseInt('100px')=100

实现一个闭包和继承的例子 (http://blog.csdn.net/canot/article/details/50760470)

例子如下:

 1 function extend(obj1){
 2     function F(){ }
 3    //判断传递进行的是一个new出来的对象
 4    if(typeof obj1 == "object"){
 5         for(var i in obj1){
 6         //直接调用对象的属性来获取,调用方法的prototype来接受
 7           F.prototype[i] = obj1[i];
 8          }
 9     }
10     //返回函数
11     return  F;
12 }
13 var person_son = extend(new Person());
14 var p = new person_son();
15 p.sayHello();
16 p.setName("abc");
17 alert(p.getName());

手机里的事件有哪些?

基本事件:

touchstart //手指刚接触屏幕时触发 
touchmove //手指在屏幕上移动时触发 
touchend //手指从屏幕上移开时触发

下面这个比较少用:touchcancel //触摸过程被系统取消时触发 

每个事件都有以下列表,比如touchend的targetTouches当然是 0 咯:

touches //位于屏幕上的所有手指的列表
targetTouches //位于该元素上的所有手指的列表
changedTouches //涉及当前事件的所有手指的列表

在字符串中查找子字符串,列出所有匹配项的索引值

自己写的笨方法:

 1 var str1="abcdfhjreabkdjgdabcfdg";
 2 var str2="abc";
 3 var indexArr=[];
 4 for(var i=0;i<str1.length;i++){
 5     if(str1[i]==str2[0])
 6      indexArr.push(i);
 7 }
 8 var returnArr=indexArr;
 9 for(var j=0;j<indexArr.length;j++){
10     for(var i=1;i<str2.length;i++){
11         if(str1[indexArr[j]+i]!==str2[i]){
12             returnArr.splice(j,1);
13             break;
14         }
15     }
16 }

使用indexOf最好:

 

深拷贝与浅拷贝?

 

关闭窗口会触发什么事件?

onclose,onunload,onbeforeunload

dom树的理解?

 

requestAnimationFrame和setTimeout,setInterval的区别?

如果使用setInterval函数每100ms执行一段代码,中间有一次任务执行时间为1000ms,那么这次任务后会连续执行10次代码吗(即setInterval的任务会堆积吗)

参见:http://www.cnblogs.com/hyea/p/5596079.html

nodejs跨域

http://www.cnblogs.com/zhoudaozhang/p/4704396.html

posted @ 2017-02-18 17:57  方帅  阅读(301)  评论(0编辑  收藏  举报