Module的语法, JS中的 export 和 import

这篇具有很好参考价值的文章主要介绍了Module的语法, JS中的 export 和 import。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在ES6之前, 社区制定了一些模块加载方案, 最主要的有CommonJS和AMD两种. 前者用于服务器,后者, 用于浏览器

ES6模块的设计思想是尽量静态化, 使得编译时就能确定模块的依赖关系

ES6模块不是对象, 而是通过export命令显示指定输出的代码,再通过import命令输入.

// ES6模块

import { stat, exists, readFile } from 'fs'

上面代码的实质是从fs模块加载3个方法, 而不加载其他方法. 这种加载成为"编译时加载"或"静态加载', 即ES6可以在编译时就完成模块加载

注意:     

         在ES6模块中, 顶层的this指向undefined, 不应该在顶层代码中使用this.

export 命令

export 命令用于规定模块的对外接口. 

一个模块就是一个独立的文件, 这个文件内部的所有变量,外部无法获取. 如果希望外部能够读取模块内部的某个变量,就必须使用export 关键字输出该变量.

// 下面js文件使用export输出变量


    // profile.js
    export var firstName = 'wei'
    export var lastName = '健力宝'
    export var year = '1958'


    // 与前一种写法是等价的, 优先考虑这种写法. 可以再脚本尾部一眼看清楚输出哪些变量
    var firstName = 'wei'
    var lastName = '健力宝'
    var year = '1958'    
    export {
        firstName,
        lastName,
        year
    }

    // 除了输出变量,还可以输出函数或class
    export function multiply(x,y){
        return x * y
    }
    
    

        使用as关键字重命名

    function v1() { ... }
    function v2() { ... }
        
    export {
        v1 as streamV1,
        v2 as streamV2,
        v2 as streamLatestVersion
    }
    // 上面代码使用as关键字重命名了函数v1和v2的对外接口,重命名后v2可以用不同的名字输出

  export 命令规定的是对外的接口, 必须与模块内部的变量建立一一对应的关系

// 报错
export 1

// 报错
var m = 1
export m

// 上面两种写法都会报错, 因为没有提供对外的接口. 
// 第一种写法直接输出1, 第二种写法通过变量m依然直接输出1. 1只是一个值, 不是接口


// 正确写法
// 写法1
export var m = 1

// 写法2
var m = 1
export { m }

// 写法3
var n = 1
export { n as m}
 
// 以上三种都是正确的, 规定了对外的接口m. 其他脚本通过这个接口取得值1. 
// 它们的实质是, 在接口名与模块内部变量之间建立一一对应.

  export 语句输出的接口与其对应的值是动态绑定关系, 通过该接口可以渠道模块内部实时的值

export var foo  = 'bar'

setTimeout(() => foo = 'baz', 5000)

// 上面代码输出变量foo, 值为bar, 5000ms之后变成baz.
// 这一点和CommonJS不同, CommonJS模块输出的是值的缓存.

 最后, export命令可以出现在模块的任意位置,只要处于模块顶端就可以.  如果处于块级作用域内,   就会报错. 

function  foo () {
    export default 'bar'
}

foo()
// 报错

import 命令

使用export 命令定义了模块的对外接口后, 其他js文件可以通过import命令加载这个模块.

    // main.js
    import { firstName, lastName, year } from './profile'
    
    // from指定的位置可以是相对位置也可以是绝对位置.

    /*
        import 命令用于加载profile.js文件 import命令接受一个对象,里面指定要从其他
        模块导入的变量名, 大括号中的变量必须与被导入模块对外接口的名称相同.
    */

 如果要为输入的变量重新取一个名字,要在import 命令中使用as关键字

import { firstName as surname } from './profile'

  import 命令具有提升效果, 会提升整个模块的头部并首先执行

foo()

import { foo } from 'module'

// 不会报错, 因为import的执行早于foo的调用
// 本质是,import命令是在编译阶段执行的,在代码运行之前

模块的整体加载

除了指定加载某个输出值, 还可以整体加载(星号*)来指定一个对象.

    // circle.js
    export function area(radius) {
        return Math.PI * radius * radius
    }

    export function circumference(radius) {
        return 2 * Math.PI * radius
    }

    // main.js
    import { area, circumference }  from './circle'
    console.log('圆面积', area(4) );
    console.log('圆周长', circumference(14) )

    // 整体加载的写法
    import * as circle from './circle'
    console.log('圆面积', circle.area(4) );
    console.log('圆周长', circle.circumference(14) );

export default 命令

export default 命令为模块指定默认输出

// export-default.js
export default function() {  // 默认输出是一个函数
    console.log('foo')
}


// import-default.js
import customName from './export-default'

customName() // 输出foo

//上面的import命令可以用任意名称指向export-default输出的方法.这时import不需要大括号


// export default用在非匿名函数也是可以的
export default function foo() {  
    console.log('foo')
}

import foo from 'foo'
// 对应的import语句不需要使用大括号


// 或者写成

function foo() {
    console.log('foo')
}

export foo
// 需要使用大括号

本质上, export default 就是输出一个叫做default的变量或方法, 然后系统允许我们为它取任意名字.

export和import的复合写法

如果在一个模块中先输入后输出同一个模块,import语句可以与export语句写在一起.文章来源地址https://www.toymoban.com/news/detail-431939.html

export { foo, bar } from 'module'

//等同于

import { foo, bar } from 'module'
export { foo, bar }

到了这里,关于Module的语法, JS中的 export 和 import的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Three.js系列-报错export ‘Geometry‘ (imported as ‘THREE‘) was not found in ‘three‘

    遇到这种报错,是因为你使用的是低版本的语法,需要修改为最新的,three.js 在 R125版本后将Geometry替换使用BufferGeometry 所以只需要搜索代码中的THREE.Geometry 小伙伴们,先写到这里啦,我们明天再见啦~~ 大家要天天开心哦 欢迎大家指出文章需要改正之处~ 学无止境,合作共赢 欢

    2024年02月08日
    浏览(53)
  • setup语法糖报错 vue-router.mjs:3451 TypeError: Failed to fetch dynamically imported module:

    当直接将setup写在script标签上 会报错 vue-router.mjs:3451 TypeError: Failed to fetch dynamically imported module: 这是setup语法糖导致的错误,此时就老老实实按照vue3原本的写法export default{xxxxxx}即可解决 vue3中setup语法糖写法: 原始正常写法: 改成原始写法后就不报错了!!!看来还是不能偷

    2024年02月12日
    浏览(39)
  • “TypeError: utils request jS WEBPACK IMPORTED MODULE O .default is undefined‘报错

    写项目时报下列错误,找了半天,结果才发现自己在request.js中少写了一行代码 一定不要少些代码 request.js完整代码

    2024年02月22日
    浏览(64)
  • python中import js2py报错:No module named ‘js2py‘

    这种错误的原因是没有安装js2py 安装js2py的方法步骤: 1.首先使用快捷键”Ctrl+R“运行打开任务栏; 2.在任务栏输入cmd,点击确定; 3.找到python的安装路径; 4.这是我的安装路径: 这是我的python安装路径 5.在命令提示符窗口中切换到该路径: 6.然后输入:pip install js2py,点击

    2023年04月08日
    浏览(34)
  • Uncaught SyntaxError: The requested module ‘…/xx/xx/x.js’ does not provide an export named ‘default’

    今天遇到这个报错 虽然很低级 ,正因为如此所以做个记录吧。今天在一个文件中import 一个文件, 出现了如下报错: Uncaught SyntaxError: The requested module ‘…/xx/xx/x.js’ does not provide an export named ‘default’ 斗胆翻译一下这句话:意思是这是一个未捕获的语法错误:请求的这个模

    2024年01月21日
    浏览(44)
  • 前端vue打包时遇到‘default‘ is not exported by node_modules/vue/dist/vue.runtime.esm-bundler.js, imported by

    主要原因是由于用到的组件进行npm i时默认使用的是vue2,不支持vue3,但是前端框架使用的是vue3,所以导致重构编码时会报错, 网上查询说         当我们在使用rollup编译es6时,可能会遇到以下报错问题,需要 安装@rollup/plugin-commonjs插件 npm install @rollup/plugin-commonjs 最后,

    2024年02月05日
    浏览(64)
  • export和export default和import的说明

    目录 1.说明 2.export 3.import 4.export default 5.总结 1.说明 ES6中,export与export default均可用于导出常量、函数、文件、模块等。 import用于导入其他被导出的常量、函数、文件、模块等。 2.export 一个独立的文件,该文件内部的变量,方法等,外部无法获取。如果想读取其他vue文件中的

    2024年02月05日
    浏览(51)
  • Javascript 模块导入导出(import export)

    笔者开始学习 Javascript 的时候,对模块不太懂,不知道怎么导入模块,导出模块,就胡乱一通试 比如 import xx from \\\'test.js\\\' 不起作用,就加个括号 import {xx} from \\\'test.js\\\' 反正总是靠蒙,总有一种写法是对的,其实还是没有理解,还是不懂 尤其是在当初写 www.helloworld.net 网站的时候

    2024年02月05日
    浏览(37)
  • Vue3安装pixi.js 项目无法识别 ?. 语法,导致报错Module parse failed: Unexpected token

     error  in ./node_modules/@pixi/assets/lib/resolver/parsers/resolveTextureUrl.mjs Module parse failed: Unexpected token (9:62) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders |   test: loadTextures.test, |   parse: (value) = ({     resolut

    2024年02月11日
    浏览(40)
  • Angular 中declarations,imports,providers,exports的用法?

    在Angular中,declarations、imports、providers和exports是NgModule(模块)装饰器中的关键配置项,用于定义和配置Angular应用的模块。每个模块在应用中扮演不同的角色,以下是它们的主要用法: declarations(声明): declarations 数组中列出了当前模块中所有属于这个模块的组件、指令和

    2024年02月04日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包