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

2018-05-24 21:51:50 +08:00
 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

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

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-05-25 12:22:53 +08:00
@SergeGao x += async2 这句只阻塞了后面 前面的 x 没有重新计算 进了函数体的时候 x 是 0 然后 async2 阻塞 去运行函数外面的第一个 console 然后回来继续执行 x 没有重新计算 所以 0+2 还是 2

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

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

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

https://www.v2ex.com/t/457568

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

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

© 2021 V2EX