看到一个面试题

2021-03-01 18:27:22 +08:00
 1sm23
函数在执行之后等待 3 秒返回 1,感觉是一个 js 事件的问题,想不出来😹
5555 次点击
所在节点    JavaScript
45 条回复
1sm23
2021-03-02 10:59:57 +08:00
@cenbiq 直呼牛逼
cczeng
2021-03-02 11:12:34 +08:00
睡眠排序的兄弟?
rodrick
2021-03-02 11:24:07 +08:00
昨天问了我怎么在代码里区分是 http1 还是 2,回来查了一下就找到一个 window.chrome.loadTimes().connectionInfo
togou
2021-03-02 12:28:23 +08:00
return new Promise(r=>setTimeout(r(1),3000));
zhuweiyou
2021-03-02 13:18:38 +08:00
await new Promise(resolve => setTimeout(resolve, 3000))
1sm23
2021-03-02 13:57:23 +08:00
@togou 不行,返回 Promise
q673115816
2021-03-02 14:56:54 +08:00
await new Promise(resolve => setTimeout(resolve, 3000, 1))
pkupyx
2021-03-02 15:45:17 +08:00
卡死当前线程的都 OK,答案自己跑一下就试出来能不能过了,主要考察对 JS 线程与任务调度的理解。
xutao881
2021-03-02 15:52:48 +08:00
。。。这个需求用来骗甲方好给自己留有优化的余地么?直接阻塞线程可还行
shilyx
2021-03-02 15:55:28 +08:00
其实这个题在问:
"既然你说你懂 JS,那么能否用 JS 证明你不懂 JS ?“
cxe2v
2021-03-02 16:28:42 +08:00
@autoxbc
@enchilada2020
这代码跑了,不靠谱
autoxbc
2021-03-02 17:27:27 +08:00
@cxe2v 那个代码是对 #4 题目的,不是楼主的题目
cxe2v
2021-03-02 18:25:20 +08:00
@autoxbc 我就是对的 4 楼的题目跑的啊,不会间隔三秒输出,我在浏览器控制台跑的
autoxbc
2021-03-02 18:41:37 +08:00
@cxe2v 那你再仔细检查一下吧,我在 firefox,vivaldi,node,deno 各跑了一次。另外为了排版,缩进那里有全角空格,要手工去掉
libook
2021-03-02 18:54:55 +08:00
理论上来说,3 秒后返回 1,应该是需要阻塞线程的,否则只能立即返回 promise,然后 3 秒后接收到值。
lwlizhe
2021-03-02 19:22:25 +08:00
好像 java 的类加载机制这块范例中有这种类似的,可惜这里是 js……
djs
2021-03-02 20:41:14 +08:00
var fun = () => {
var star = new Date().getTime();
let t = new Date().getTime();
while (t - star < 3000) {
t = new Date().getTime();
}
return 1;
};
djs
2021-03-02 20:41:42 +08:00
@djs #37 我把线程阻塞掉 3s- -,不懂符不符合
rrfeng
2021-03-02 20:53:14 +08:00
谁给我解释一下,这不就是个 sleep(3s) 的问题吗?还是我理解错了?

js 里没法实现 sleep 吗?
autoxbc
2021-03-02 21:39:55 +08:00
@rrfeng #39 js 可以 sleep,不过要用异步实现。异步的话原函数就需要先返回 promise,等 sleep 结束 resolve 出原始返回值

而这里题目不允许修改函数返回值,也就不能异步,必须同步实现,只能用死循环阻塞住同步任务

本质上不是问生产代码怎么写,而是加个不必要的预设,逼你用些奇技淫巧,目的是考察对任务调度的理解

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

https://tanronggui.xyz/t/757386

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

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

© 2021 V2EX