for(var i=0; i<6; i++) { setTimeout(() => { console.log(i) }) }
async function async1 (){ console.log("async1") await async2() console.log("async1 end") } console.log("scripts start") async1() async function async2() { await console.log("async2") } new Promise((resolve,reject)=>{ console.log("promise1") resolve() }).then(()=>{ console.log("promise2") }) setTimeout(()=>{ console.log("setTimeout") })
setTimeout(()=> console.log(1))
new Promise(resolve => { resolve() console.log(2) }).then( => { console.log(3) Promise.resolve().then( => {
console.log(4)
}).then(_ => {
Promise.resolve().then(_ => { console.log(5) })
}) })
console.log(6)
## this、作用域、声明前置、隐式转换 1. 以下代码输出
var a = function(){ this.b = 3 } var c = new a() a.prototype.b = 10 var b = 7 a() console.log(b)//3 console.log(c.b)//3
2. 代码输出什么
function Foo() { getName = function () {
console.log(1);
}
}
var getName = function () {
console.log(4);
};
function getName() {
console.log(5);
}
Foo.getName = function () {
console.log(2)
}
Foo.prototype.getName = function () {
console.log(3);
}
Foo.getName()
getName()
new Foo.getName()
1. 隐式转换
if ([]) console.log(1); if ([].length) console.log(2); if ([] == 0) console.log(3); if ({} === {}) console.log(4);
## 算法 1. 给两个数组[1,2,3],[2,1,3,4],如果A包含于B返回1,B含于A返回2,其他返回0 2. 无重复的字符串字串 3. 合并两个有序链表 4. 最长回文子串 5. 最长无重复字符子串 6. 搜索二叉树,找出第k大 7. 很长的字符串返回出现次数最多的字母以及相应次数 8. 多叉树的最大深度 9. js实现树的深度优先搜索、广度优先搜索 10. 返回前k个最小的数字组成的数组,保持相对顺序 ## 手写 1. 手写一个Promise.all (3) 2. 手写Promise,包含简单的逻辑即可 2. 用reduce实现map 3. 手写一个repeat函数,要求每隔3秒alert一次helloWorld,总共输出4次
function repeat(func, times, wait){ ... } var rp = repeat(alert, 4, 3) rp('helloWorld')
4. 字符串转化为数字
// 'A' => 1 // 'B' => 2 // 'AA' => 27
5. 手写观察者(3), 带once 6. 代码题:写一个函数打印杨辉三角前n行
[
[1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]
]
6. 用call/apply实现bind 7. 实现大数相加 8. 手写防抖节流 9. 实现并发控制 10. 写一个instanceof的实现