《重学前端》学习笔记Day109

网络维
• 阅读 429

JavaScript语法:在script标签写export为什么会抛错?

脚本和模块

首先,JavaScript有两种源文件,一种叫做脚本,一种叫做模块。在ES6引入模块机制,在此之前,就只有一种源文件类型(就只有脚本)。
脚本可以由浏览器或者node环境引入执行,而模块只能由JavaScript用import引入执行。实际上区别在于是否包含import和export。
脚本是一种兼容之前的版本的定义,在这个模式下,没有import就不需要处理加载".js"文件问题。
现代浏览器可以支持script标签引入模块或脚本,如果要引入模块,就给script标签添加"type=module",如果是脚本,就不需要加。

<script type="module" src="xxxxx.js"></script>

所以script不加"type=module",默认认为加载的文件是脚本而不是模块,如果脚本中写了export,就会报错。

脚本中可以包含语句。模块中可以包含三种内容:import声明,export声明和语句。
《重学前端》学习笔记Day109

import声明

import声明有两种用法,一个是直接import一个模块,另一个是带from的import,它能引入模块里的一些信息。
直接import一个模块,只能保证了这个模块代码被执行,引用它的模块是无法获得它的任何信息的。
带from的import意思是引入模块中一部分信息,可以把它们变成本地的变量。
分为三种用法:

import x from "./a.js" // 引入模块中导出的默认值。可以与下边两个方式组合
import {a as x, modify} from "./a.js"; // 引入模块中的变量。
import * as x from "./a.js" // 把模块中所有的变量以类似对象属性的方式引入。

export声明

export与import相对,承担的是导出的任务。
模块导出变量方式有两种,一种是独立使用export声明,另外一种是直接在声明语句前添加export关键字。
Export 还有一种特殊的用法,就是跟default联合使用。export default 表示导出一个默认变量值,它可以用于function和class。这里导出的变量是没有名称的,可以使用import x from "./a.js",在模块中使用;

函数体预处理

var声明

function声明

class声明

指令序言机制

脚本和模块都支持一种特别的语法,叫做指令序言(Directive Prologs)。这里的指令序言最早是为了"use strtict" 设计的,规定了一种给JavaScript代码添加元信息的方式。

此文章为7月Day12学习笔记,内容来源于极客时间《重学前端》,日拱一卒,每天进步一点点💪💪
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Alex799 Alex799
4年前
Node.js 如何处理 ES6 模块
Node.js如何处理ES6模块作者:日期:学习JavaScript语言,你会发现它有两种格式的模块。一种是ES6模块,简称ESM;另一种是Node.js专用的CommonJS模块,简称CJS。这两种模块不兼容。很多人使用Node.js,只会用require()加载模块,遇到ES6
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Python进阶者 Python进阶者
3年前
一文带你解读​JavaScript的基本用法
前言相信做网站对JavaScript再熟悉不过了,它是一门脚本语言,不同于Python的是,它是一门浏览器脚本语言,而Python则是服务器脚本语言,我们不光要会Python,还要会JavaScript,因为它对做网页方面是有很大作用的。JavaScript的基本用法1.如何使用Js脚本1).引入Js文件在头部标签中导入脚本标签并指明脚本文件路径2).
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
ES6学习笔记(二十)Module 的加载实现
上一章介绍了模块的语法,本章介绍如何在浏览器和Node之中加载ES6模块,以及实际开发中经常遇到的一些问题(比如循环加载)。1.浏览器加载传统方法 HTML网页中,浏览器通过<script标签加载JavaScript脚本。<!页面内嵌的脚本<scripttype
Stella981 Stella981
3年前
Noark入门之异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时<br比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦0x00事件源一个实现xyz.noark.core.event