javascript 代码块是否相对于单线程原子地运行?

问题描述

当我在 Typescript 中开发并且我有一个变量时:

const fn: undefined | () => void

并写下:

...
if (!fn)
    return;
setTimeout(() => fn(),0);
...

Typescript 会抱怨,指出 fn 对象可能在 setTimeout 中未定义,因为它将异步执行,到它执行时,fn 函数可能确实是未定义的,因此不能作为函数调用

所以我必须做这样的事情:

...
setTimeout(() => {
 if (!fn)
    return;
 fn();
},0);
...

但是语句的原子性达到什么水平?

我的意思是,即使我在 fn 中检查 undefined 不是 if,我怎么能确定它仍然不会被语句 fn() 定义。 javascript 在哪个级别提供这种“原子性”/“并发性”?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)