1.判断一个函数是否标记为 async
function isAsyncFunction(func){
const str=Object.prototype.toString.call(func);
return str=='[object AsyncFunction]';
}
2.两个大整数之和
/**
* 1.将两个数字对齐
* 2.从后往前循环,按位相加同时加上进位
* 3.计算进位
* 4.到最后一位时,如果有进位则加上进位
*/
function sum(a,b){
const len =Math.max(a.length,b.length);
a=a.padStart(len,'0');
b=b.padStart(len,'0');
let carry=0;
let result='';
for(let i=len-1;i>=0;i--){
const sum=+a[i] + +b[i] +carry;
result=(sum%10) + result;
carry=Math.floor(sum/10);
}
if(carry){
result=carry + result;
}
return result;
}
3.模拟微队列
function runMicroTask(func){
//promise 存在的情况
if(typeof Promise !=='undefined'){
Promise.resolve().then(func);
return ;
}
//使用MutationObserver
if(typeof MutationObserver!=='undefined'){
var observer=new MutationObserver(func);
var textNode=document.createTextNode("1");
observer.observe(textNode,{characterData: true});
textNode.data='2';
return;
}
// node 环境
if(process && process.nextTick){
process.nextTick(func);
return;
}
setTimeout(func);
}
4.剩余参数
当函数参数不定的时候,这个时候可以使用剩余参数
function sum(...args){
let r=0;
for(let i=0;i<args.length;i++){
r+=args[i];
}
return r;
}
sum(1,2)
sum(1,2,3)
如果函数不止一个参数,剩余参数只作为最后一个参数使用。
5. 多层循环跳出
如果有两层循环,当第二层循环满足条件时需要跳出循环,可以jslabel 跳出循环。
outer: for(i=0;i<10;i++){
console.info("i",i);
for(j=0;j<10;j++){
console.info("j",j);
if(j==5){
break outer;
}
}
}
标签:面试题,return,sum,JS,let,result,func,carry
From: https://www.cnblogs.com/yg_zhang/p/18031568