js 面试题

一、将这段字符串 "I'm????driving????to??beijing????after?breakfast",格式化为:"I'm driving to beijing after breakfast"。

var str = "I'm????driving????to??beijing????after?breakfast",
    sub="";
for(let i = 0; i < str.length; i++){
    if(str[i] != '?'){
        sub += str[i];
        isFirstSpace = false;
    }else if(!isFirstSpace){
        sub += " ";
        isFirstSpace = true;
    }
}
console.log(sub);

 

二、不可用 JavaScript 控制循环的方法和关键字,最终生成数组 [3, 6, ...]。

  • 范围和初始值都使用参数控制;
  • 每次加 3。
function fn(num, max, arr){
    if (typeof num !== "number") return false;
    if (typeof max !== "number") return false;
    arr.push(num);
    if(num === max) return arr;
    return fn(num+3, max, arr);
}

fn(3, 30, []);
console.log(fn(3, 30, []));

 

三、请给出下面代码的输出结果(Promise + setTimeout)

console.log("a");

let promise = new Promise(function(resolve, reject){
	setTimeout(function(){
		console.log('b');
	},0);
	console.log('c');
	resolve();
});

promise.then(() => {
	console.log("d");
	setTimeout(function(){
		console.log("e");
	},0)
});

setTimeout(() => {
	console.log("f");
},0)

console.log("g");

解析:

本题考查的知识点是:

  • Promise 本身是同步的,他的 then() 方法和 catch() 方法是异步的。
  • setTimeOut 本身是同步的,用来通过设置延迟时间来模拟异步而已。

该题的解题思路可以分为四步:

  • 第一步,输出的是同步的、非 setTimeout 的代码。
  • 第二步,输出的是异步的、非 setTimeout 的代码。
  • 第三步,输出的是setTimeout 的、同步的代码。
  • 第四步,输出的是setTimeout 的、异步的代码。

1、找出同步的、非 setTimeout 的代码

console.log("a");
let promise = new Promise(function(resolve, reject){
    console.log('c');
});
console.log("g");

所以,先打印的是:a c g。

2、找出异步的、非 setTimeout 的代码

let promise = new Promise(function(resolve, reject){
	resolve();// 执行 then() 里的内容
});
promise.then(() => {
	console.log("d");
});

然后,打印的是: d。

3、找出setTimeout 的、同步的代码。

let promise = new Promise(function(resolve, reject){
	setTimeout(function(){
		console.log('b');
	},0);
});
setTimeout(() => {
	console.log("f");
},0);

然后,输出的是:b f。

4、找出setTimeout 的、异步的代码。

promise.then(() => {
	setTimeout(function(){
		console.log("e");
	},0)
});

最后,输出的是:e。

所以,最后的完整输出顺序是:a c g d b f e。

 

 

 

你可能感兴趣的:(#,JavaScript)