一道关于 Promise 的面试题
要求: 使用以下代码实现:首先输出 1,等待 3 秒后才输出 3
console.log(1) await delay(3000) console.log(3)
|
async function fn() { console.log(1) await delay(3000) console.log(3) }
fn() function delay(time) { if (typeof time !== 'number') { throw new Error('请输入数值类型') } return new Promise(resolve => { setTimeout(resolve, time) }) }
|
输出结果
var a = 0, b = 0
function A(a) { A = function (b) { console.log(a + b++) } console.log(a++) }
A(1) A(2)
|
1
4
输出结果
let a = {}, b = '0', c = 0
a[b] = '唐诗'
a[c] = '宋词'
console.log(a[b])
|
宋词
js对象中的key通常是字符串或Symbol类型。使用其他类型作为键,js会自动转换为字符串或Symbol。
输出结果
let a = {}, b = Symbol('1'), c = Symbol('1')
a[b] = '唐诗'
a[c] = '宋词'
console.log(a[b])
|
唐诗
Symbol是唯一的。
输出结果
let a = {}, b = { n: '1' }, c = { m: '2' }
a[b] = '唐诗'
a[c] = '宋词'
console.log(a[b])
|
宋词
对象作为key时会调用toString()转换为字符串,最终为:[object Object]。
var test = (function (i) { return function () { alert((i *= 2)) } })(2)
test(5)
|
弹出框中显示4,注意alert只会输出字符串类型,所以准确回答是:字符串4。
test函数是立即执行函数,返回一个函数,其中的内容为:alert(4)。
调用test(5),其实5没有用,立即函数中的i是后面调用的2,所以test(5)传递的参数无效。
输出结果
console.log(1)
const promise = new Promise((resolve, reject) => { console.log(2)
setTimeout(() => { resolve(3) reject(4) }, 0) })
promise .then(data => { console.log(data) }) .catch(error => { console.log(error) })
console.log(5)
|
1
2
5
3
- console.log(1),输出 1。
- const promise = new Promise((resolve, reject) => {...}), 创建一个 Promise。
- console.log(2),输出 2。
- setTimeout(() => {...}, 0),添加到宏任务队列中。
- promise.then((data) => {...}).catch((error) => {...}),添加到微任务队列中。
- console.log(5),输出 5。
- setTimeout 内部的代码执行,输出 6。
- resolve(3):Promise 被解决,传递了数据 3。
- reject(4):这行代码不会被执行,因为 Promise 已经被解决了。
输出结果
for (i = 0; i < 3; i++) { setTimeout(() => console.log(++i), 0) }
|
4
5
6
输出结果
var fullname = 'a'
var obj = { fullname: 'b', prop: { fullname: 'c', getFullname: () => { return this.fullname } } }
console.log(obj.prop.getFullname())
var test = obj.prop.getFullname
console.log(test())
|
a
a
写一个函数根据参数输出对应的棱形
function createDiamondByParam(count) { if (!(count - 1)) { return console.log('*'); } const rows = 2 * count - 1 for (let i = 1; i < rows; i += 2) { const num = (rows - i) / 2 console.log(' '.repeat(num) + '*'.repeat(i)); } for (let i = rows; i > 0; i -= 2) { const num = (rows - i) / 2 console.log(' '.repeat(num) + '*'.repeat(i)); } } createDiamondByParam(3)
|
个人简介:脆弱的种子在温室也会死亡,坚强的种子,在沙漠也能发芽。