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