importOnce()

    语法

    importOnce(<filename>)

    类别

    Global

    在编写新的js脚本时存在重用现有脚本的可能性。可通过该命令将 js 文件导入并执行。

    Note:

    • 在一段js脚本中,如果导入的文件和该脚本对同个函数有多个定义,那么在先导入文件再在脚本中定义相同函数的场景下,实际生效的函数定义将会是导入文件中的函数定义。导致这个现象的原因是js运行前会先读取该段js脚本的函数定义,而导入的文件中的函数定义是在运行importOnce方法时才读取的,这导致了最终生效的是导入文件中的函数定义。通过将脚本中的函数放置到别的文件中再导入,可以规避这个问题。

    参数

    • ( String必填 )

    js文件的相对路径名或全路径名。

    返回值

    成功:无返回值。

    importOnce()函数常见异常如下:

    当异常抛出时,可以通过获取错误码,或通过获取错误信息。可以参考常见错误处理指南了解更多内容。

    版本

    v2.9及以上版本。

    示例

    1) helloWorld.js 内容如下:

    2) 多次导入执行 helloWorld.js,只在第一次导入执行文件。

    1. > importOnce( 'helloWorld.js' )
    2. import helloWorld.js
    3. Takes 0.000849s.
    4. > importOnce( 'helloWorld.js' )
    5. Takes 0.000354s.
    6. > sayHello()
    7. hello world
    8. Takes 0.000436s.
    • 函数重复定义问题及规避方法

      • 问题描述举例

    2) test.js 内容如下:

    1. importOnce( './funcDef.js' ) ;
    2. {
    3. println( 'defined in test.js' ) ;
    4. }
    5. test() ;

    3) 使用 sdb 执行 test.js 文件

    可以发现,实际生效的是 funcDef.js 中的函数定义。

    • 规避方法

    可以通过将脚本中的函数定义放置到单独的文件再导入来规避这个问题

    1) 增加文件 userDef.js,内容如下:

    1. function test()
    2. {
    3. println( 'defined in userDef.js' ) ;
    4. }

    2) test.js 内容改为:

    1. $ ./sdb -f test.js
    2. defined in userDef.js

    可以发现,实际生效的是 userDef.js 中的函数定义。