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

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 条回复
xqin
2018-05-25 22:22:40 +08:00
不用 += 就可以得 1, 3
```
let x = 0;
async function test() {
x = (await 2) + x;
console.log(x)
};
test();
x+=1;
console.log(x);
```

youtube 那个朋友的问题, 换成
```
totalSize = (await getSize(file)) + totalSize
```
就可以解决.

把 await 放面.
xqin
2018-05-25 22:37:07 +08:00
另外这个问题, 本身并不是 await 引起的, 而是 赋值语句 计算值 是从左向右的这个过程产生的效果.

具体可参考这个:
https://twitter.com/KyleDavidE/status/999625457816555520

```
let val = 0;

function inc1(){
val++;
console.log(val);
return 2;
}

function inc2(){
val += inc1();
console.log(val);
}

inc2();
```

---

```
let val = 0;

function inc1(){
val++;
console.log(val);
return 2;
}

function inc2(){
val = inc1() + val;
console.log(val);
}

inc2();
```
xqin
2018-05-25 22:40:43 +08:00
再者这个问题和 es6 一毛钱关系都没有, 所以拿这个题来打脸, 并不是打的 es6 这个点, 而是 js 基础知识.
murmur
2018-05-25 22:56:24 +08:00
@xqin 那你用 es5 的语法来解释下为什么 x+=await 2 这句吧

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

这是 js 基础的理解版 1 和 3 的答案 也就是能考虑到 await 的 2 个阻塞 x 重新计算了
但是你从 es5 的哪一条能解释清楚 await2 阻塞了但是回来的时候 x 的值并没有重新计算
murmur
2018-05-25 22:59:55 +08:00
@xqin 没看到上面的回复 打扰了
rabbbit
2018-05-26 00:15:13 +08:00
这么理解对吗?
byztl
2018-05-26 15:01:48 +08:00
let 不是常量吗?
0x11901
2018-05-26 23:25:21 +08:00
第一感觉是 1,3
打开浏览器 console 试了下是 1、2

估计这就是我为什么讨厌 js 的原因
Exin
2018-06-09 15:57:29 +08:00
哎,倒在了 `+=` 上面

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

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

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

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

© 2021 V2EX