回答
在HarmonyOS NEXT开发中,import
语句用于从其他模块或文件中导入功能、对象或原始值,使得它们可以在当前文件中被使用。根据你的描述,import
有几种不同的用法,下面是针对你提出的问题的详细解答:
第3种情况表示什么意思?
第3种情况:
import './ohcard/index';
这种用法表示导入并执行./ohcard/index.ets
文件中的所有代码,但不导入任何特定的导出项(即不绑定任何标识符到当前作用域)。这种导入方式通常用于执行模块中的副作用代码,比如初始化函数、设置全局变量或注册组件等。
问题1. 是否import了’./ohcard/index.ets’中的所有的export的标识?
答案:否。
这种导入方式(不带花括号且没有指定导出项)不会在当前作用域中创建任何来自./ohcard/index.ets
的导出项的绑定。它只是执行该文件中的代码,而不将任何导出的标识符(如函数、变量、类等)导入到当前作用域。
问题2. './ohcard/index.ets’里的全局函数调用,全局代码是否会执行,如果会执行,那么多个使用方都import './ohcard/index’一遍,那么使用的地方是否把这些全局代码都执行一遍?
答案:是,但通常只执行一次(取决于模块系统实现)。
在大多数现代JavaScript和类似HarmonyOS NEXT的模块系统中,每个模块(文件)只会被执行一次,无论它被导入多少次。这意味着如果./ohcard/index.ets
中有全局代码(如函数调用、变量赋值等),这些代码只会在该模块首次被导入时执行一次。随后的导入将不会重新执行这些代码,而是重用首次导入时创建的状态。
然而,需要注意的是,如果模块中的代码依赖于外部状态(如文件系统的变化、网络请求的结果等),并且这些状态在模块执行后发生了变化,那么这些变化将不会反映在已经执行过的模块代码中。这是因为模块代码只执行一次,并且之后再次导入时不会重新执行。
总结来说,在HarmonyOS NEXT中,import
语句用于导入模块或文件中的代码,根据使用花括号与否以及是否指定默认导出,可以有不同的导入行为。对于只执行副作用代码的导入,应确保这些代码的执行次数符合预期,以避免不必要的重复执行或状态不一致的问题。
三种方式都是导入文件,区别在于导入的变量不一样。第三种是导入了文件,但是没有导入该文件 export 的变量。多次导入同一个文件时不会多次执行。