前端面试题总结三

接上次分享的面试题,我又总结了一些我认为还不错的题目,希望总结出来能够给大家一些帮助,也有可能有些错误理解,如果哪里不正确还希望大神多多指教

1.看下面代码,请问多久能弹出ok?

var m = true;
setTimeout(
 function() {
  m=false;
 },3000);
while(m){}
alert('OK')
结果:浏览器崩溃,卡死

2.下面输出结果

const a=[];
for(var i=0;i<10;i++){
    a.push(function(){
        return console.log(i)
    })
}
a[0]()
a[1]()
结果:10, 10

上面这道和之前总结的面试题有一道题很类似,假如我们把var改成let,结果就不一样了

const a=[];
for(let i=0;i<10;i++){
    a.push(function(){
        return console.log(i)
    })
    console.log('a',a)
}
a[0]()
a[1]()
结果是:0, 1

3.写一个函数,输入一个数组a,找到里面是否存在三个不同的元素,使得a[i]+a[j]=a[k],如果能找到输出true,找不到输出false,

例如

输入 var a1=[2,99,3,5],可以找到 2+3=5;因此输出true

输入 var a2=[2,8,99],不能找到,因此输出false;

4.随机遍历数组,一个长度为n的数组,每次随机挑选一个元素,尽可能快的遍历到全不元素,最终返回一个新的数组

5.下面的题毫无疑问,相信大家都知道结果,这里不详细说明

var a = 0.1
var b = 0.2
var b = 0.3
var d = 0.6
console.log([b-a == a, d-b==b]) //[true,true]

console.log([1<2<3,3<2<1])//[true,true]

6.下面这道题主要考察的是数组声明和map(map方法能否改变原始数组?)

var ary = Array(3)
ary[0]=2;
console.log('ary',ary,ary[1])// [2, empty × 2] undefined
let result = ary.map(function(elem){return '1'}) //这里的map不会改变原数组
console.log('ary后面',result,ary,ary[1])  //["1", empty × 2] (3) [2, empty × 2] undefined

7.下面这道题详考察的是arguments使用

//考察argunments
function sidEffecting(ary) {
    ary[0]=ary[2]
}
function bar (a,b,c){
    c=10
    sidEffecting(arguments)
    return a+b+c
}
console.log('输出',bar(1,1,1))//21

8.以下代码打印结果

var name = 'Tom';//这里改成let结果一样哦
(function(){
    if(typeof name == 'undefined') {
        name = 'jack';
        console.log('GoodBye'+name)
    } else {
        console.log('Hello'+name)
    }
})();
结果:HelloTom

9.下面的题考察的还是argunments

var length = 10;
function fn(){
    console.log(this.length)
}
var obj = {
    length:5,
    method:function(fn){
        fn();
        arguments[0]()
    }
}
obj.method(fn,1)
结果:10, 2

 

你可能感兴趣的:(js,前端面试题)