01-20
模拟实现
- 根据async/await与generator的关系模拟实现
js
// gen 为generator
function myAsync(gen){
}
// 测试代码
myAsync(function* () {
const a = yield Promise.resolve(1)
const b = yield new Promise((res, rej) => {
setTimeout(() => {
res(2)
}, 2000)
})
const c = yield Promise.resolve(3)
console.log(a, b, c);
try {
const d = yield Promise.reject(4)
} catch (error) {
console.log(error);
}
return [a, b, c]
}).then(console.log)
// 输出
// 1 2 3
// 4
// [1,2,3]
理论
- 考察隐式类型转换,下面if为真的有哪些
js
if([])
if({})
if([]==false)
if({}==false)
- this指向考察
js
function a(){
this.b = 3
}
a()
console.log(b) // ?
var b = 5
console.log(b) // ?
var c = new a()
console.log(b) // ?
a.prototype.b = 4
a.prototype.c = 5
console.log(c.b) // ?
console.log(c.c) // ?
console.log(b) // ?
- 什么是动态作用域?什么是静态作用域?
- js是动态还是静态作用域
- 作用域考察
- 例1
jsvar scope = "global scope"; function checkscope() { var scope = "local scope"; function f() { return scope; } return f(); } console.log(checkscope()); // ?
- 例2
jsvar scope = "global scope"; function checkscope(){ var scope = "local scope"; function f(){ return scope; } return f; } checkscope()(); // ?
- 例3
jsfor(var i = 0;i<2;i++){ setTimeout(()=>{ for(var j = 0;j<3;j++){ setTimeout(()=>{ console.log(i*j) },0) } },0) } // 输出结果是多少?为什么 // var 变为 let 结果又是多少?为什么
dom相关
- 如何获取一个dom对象
- 如何获取指定dom的指定属性
- 如何获取指定dom的指定样式
- 如何获取指定dom的生效样式