JavaScript 模块 - 动态导入和副作用
JavaScript modules - dynamic imports and side effects
任何人都可以准确地告诉我以下内容的含义,来自 MDN docs 的 import()
(强调我的):
The following are some reasons why you might need to use dynamic import: ... When the module being imported has side effects, and you do not want those side effects unless some condition is true.
我看不出动态导入对副作用有何影响。引用表明动态导入以某种方式减轻或可以避免副作用,这(据我所知)是不正确的。是的,他们的意思是我们可以有条件地导入,但导入仍然意味着副作用。
也就是说,如果我这样做:
//module.js
let foo = 'bar';
alert('Unwanted side effect!');
export {foo};
//...
//mainscript.js
import('./module.js').then(obj => { });
...我仍然收到警报。
我是不是误解了上面的内容?
我也可能误解了,但我的看法是你可以有条件地导入东西:
//mainscript.js
if(somethingIsTrue){
import('./module.js').then(obj => { });
}
所以如果模块中有副作用,你只会在实际使用模块的情况下得到它们。在静态情况下,模块总是被导入,你总是会产生副作用。
任何人都可以准确地告诉我以下内容的含义,来自 MDN docs 的 import()
(强调我的):
The following are some reasons why you might need to use dynamic import: ... When the module being imported has side effects, and you do not want those side effects unless some condition is true.
我看不出动态导入对副作用有何影响。引用表明动态导入以某种方式减轻或可以避免副作用,这(据我所知)是不正确的。是的,他们的意思是我们可以有条件地导入,但导入仍然意味着副作用。
也就是说,如果我这样做:
//module.js
let foo = 'bar';
alert('Unwanted side effect!');
export {foo};
//...
//mainscript.js
import('./module.js').then(obj => { });
...我仍然收到警报。
我是不是误解了上面的内容?
我也可能误解了,但我的看法是你可以有条件地导入东西:
//mainscript.js
if(somethingIsTrue){
import('./module.js').then(obj => { });
}
所以如果模块中有副作用,你只会在实际使用模块的情况下得到它们。在静态情况下,模块总是被导入,你总是会产生副作用。