哈, 我觉得这道题拿来做面试题不错

2018 年 5 月 24 日
 fulvaz

加班准备走...

在 twitter 上看到了个有意思的问题

我觉得如果有人说自己熟悉 es6 的话, 可以用这个来打脸

    let x = 0;
    async function test() {
        x += await 2;
        console.log(x)
    };
    test();
    x+=1;
    console.log(x);

这里输出了什么? 又是为什么呢?

答案:

https://www.youtube.com/watch?time_continue=278&v=bfxglBVSNDI

ps: 用这种题目做面试题估计又会被人说是造火箭吧. 我倒是觉得面试造火箭没啥错, 万一哪天在拧火箭的螺丝呢?

原文: https://twitter.com/jaffathecake/status/999269332889763840

9892 次点击
所在节点    JavaScript
49 条回复
pheyer
2018 年 5 月 25 日
这题应该这么考才对:
let x = 0;
async function test() {
console.log(x);
x += await 2;
console.log(x)
};
test();
x+=1;
console.log(x);
答案是多少?
Garwih
2018 年 5 月 25 日
@lauix #20 然而答案是 1,2
lauix
2018 年 5 月 25 日
@Garwih 那还是我第一想法不错
nino
2018 年 5 月 25 日
这个题有点坑
cstome
2018 年 5 月 25 日
前端面试——总有一道题能问到你。
SergeGao
2018 年 5 月 25 日
@pheyer 不是很明白最后输出的为啥是 2 呀,我本来以为是 3 才对...
miketeam
2018 年 5 月 25 日
先进的文化总是在寻找共识,协调一致。垃圾文化老是在装逼秀智商
bigggge
2018 年 5 月 25 日
相当于这样吧

let x = 0;

function* test () {
x += yield 2;
console.log(x);
}

let t = test();
Promise.resolve(t.next().value)
.then(v => {
t.next(v);
});
x += 1;
console.log(x);
murmur
2018 年 5 月 25 日
@SergeGao x += async2 这句只阻塞了后面 前面的 x 没有重新计算 进了函数体的时候 x 是 0 然后 async2 阻塞 去运行函数外面的第一个 console 然后回来继续执行 x 没有重新计算 所以 0+2 还是 2

这种东西没踩过一次坑谁会用这么恶心的特性
murmur
2018 年 5 月 25 日
更正 async->await
binux
2018 年 5 月 25 日
你确定这不是未定义行为?如果 += 是一个原子操作呢?
例如编译成非 async 时,+= 是原子操作,展开成 a = await 2; x += a; 了呢?
binux
2018 年 5 月 25 日
cjyang1128
2018 年 5 月 25 日
@ericls
@menc

说实话,孔乙己原文问的是回字有几种写法,而不是茴香豆的茴有几种写法。茴香豆的茴只有一种写法,但是来回的回有很多种写法。
leekafai
2018 年 5 月 25 日
楼上兴奋吐槽的可以先进去视频看看,视频里面是有应用场景的。
murmur
2018 年 5 月 25 日
@leekafai 场景已经回了 他那个计算文件大小的 npm 随便抓一个包搞定 省事靠谱还优雅 所以其他的场景呢?
gongbaodd
2018 年 5 月 25 日
我发现了一个更有意思的是事情,babel 编译之后执行结果就不一样了
John60676
2018 年 5 月 25 日
natural
2018 年 5 月 25 日
求别遇到一个有坑的就想着拿来当面试题
gjquoiai
2018 年 5 月 25 日
我觉得楼主理解错造火箭的意思了,你这是问螺丝有几个旋儿
voidcomma
2018 年 5 月 25 日
这个有啥吐槽的,基本的考你对 async await 的理解程度。上面还一堆打死人的也是醉了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/457568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX