javascript语法(一) 极客时间
脚本和模块
javascript有两种源文件,一种叫脚本,一种叫模块。这个区分主要是在ES6引入的,ES5及之前版本只有一种源文件类型(只有脚本)。
脚本是可以有浏览器或者node环境引入执行的,而模块只能有javascript代码用import引入执行。
从概念上来讲,我们可以认为脚本具有主动性的javascript代码段,是控制宿主完成一定任务的代码;而模块是被动性的javascript代码段,是等待被调用的库。
不难发现,实际上模块和脚本之间的区别仅仅在于是否包含import和export。
脚本是一个兼容之前版本的定义,在这个模式下,没有import就不需要处理加载.js文件问题。
现代浏览器可以支持用script标签引入模块或者脚本,如果要引入模块,必须给script标签添加type=“module”。如果引入脚本,则不需要type。
<script type="module" src="xxxx.js"></script>
脚本中可以包含语句,模块中可以包含import声明、export声明、语句。
import声明:
import声明有两种用法,一个是直接import一个模块,另一个是带from的import,它能引入模块内的一些信息。
import "mod";//引入一个模块
import v from "mod";//把模块默认的导出值放入变量v
直接import一个,模块,只能保证这个模块代码被执行,引入它的模块是无法获得他的任何信息的。
带from的import意识是引入模块中的一部分信息,可以把他们变成本地变量。
带from的import细分又有三种用法:
import x from "./a.js";//引入模块中导出的默认值
import {a as x,modify} from "./a.js";//引入模块中的变量
import * as x from "./a.js";//把模块中所有的变量以类似对象属性的方式引入
第一种方式还可以和后两种方式组合使用。
import d,{a as x,modify} from "./a.js";
import d,* as x from "./a.js";
语法要求不带as的默认值永远在最前。注意,这里的变量实际上仍然可以受到原来模块的控制。例如:
模块a:
export var a=1;
export function modify(){
a=2;
}
模块b:
import {a,modify} from "./a.js";
console.log(a);//1
modify();
console.log(a);//2
导入后的变量只是改变了名字,它仍然与原来的变量是同一个。
export声明:
与import相对,export声明承担的是导出的任务。
模块中导出变量的方式有两种,一种是独立使用export声明,另一种是直接在声明型语句前添加export关键字。
独立使用export声明就是一个export关键字加上变量名列表:
export {a,b,c}
页可以直接在声明型语句前添加export关键字,这里的export关键字,这里的export可以加在任何声明性质的语句之前,整理如下:
var、function(含async和generator)、class、let、const
export还有一种特殊用法,就是跟default联合使用。export default表示导出一个默认变量值,它可以用于function和class。这里导出的变量是没有名称的,可以使用import x from “./a.js”这样的语法,在模块中引入。
export还支持一种语法,后面跟一个表达式:
var a={};
export default a;
但是这里的行为跟导出变量是不一致的,这里导出的是值,导出的就是普通变量a的值,以后a的变化与导出的值就无关了,修改变量a,不会使得其他模块中引入的default值发生改变。
在import语句前无法加入export,但是我们可以直接胡搜用export from语法。
export a from "./a.js";
函数体:
函数体就是函数花括号中间的部分。
函数体实际上有4中:
普通函数体:
function foo(){
//code
}
异步函数体:
async function foo(){
//code
}
生成器函数体:
function *foo(){
//code
}
异步生成器函数体:
async function *foo(){
//code
}
上面4中函数体的区别在于:能否使用await或者yield语句。
预处理:其实指的就是变量提升,在javascript脚本执行之前,会先把体内含有的变量先声明一下。。
指令序言:指的就是严格模式“use strict” 指令序言只能放在第一行 它之前不能有代码
javascript语法(一) 极客时间的更多相关文章
- 【视频合集】极客时间 react实战进阶45讲 【更新中】
https://up2.v.sharedaka.com/video/ochvq0AVfpa71A24bmugS5EewhFM1553702519936.mp4 01 React出现的历史背景及特性介绍 ...
- Mysql实战45讲 06讲全局锁和表锁:给表加个字段怎么有这么多阻碍 极客时间 读书笔记
Mysql实战45讲 极客时间 读书笔记 Mysql实战45讲 极客时间 读书笔记 笔记体会: 根据加锁范围:MySQL里面的锁可以分为:全局锁.表级锁.行级锁 一.全局锁:对整个数据库实例加锁.My ...
- java爬虫系列第四讲-采集"极客时间"专栏文章、视频专辑
1.概述 极客时间(https://time.geekbang.org/),想必大家都知道的,上面有很多值得大家学习的课程,如下图: 本文主要内容 使用webmagic采集极客时间中某个专栏课程生成h ...
- "做中学"之“极客时间”课程学习指导
目录 "做中学"之"极客时间"课程学习指导 所有课程都可以选的课程 Java程序设计 移动平台开发 网络攻防实践 信息安全系统设计基础 信息安全专业导论 极客时 ...
- 如何将极客时间课程制作成kindle电子书
订阅了几个极客时间的专栏,一直没有时间去看. 最近,想着如果把内容制作成电子书,利用上下班时间学习一下,岂不是很方便? 在网上搜到一个很好用的开源软件,几分钟就可以把极客时间的专栏做成电子书,简直太棒 ...
- 极客时间_Vue开发实战_汇总贴
视频地址: https://time.geekbang.org/course/intro/163 https://github.com/tangjinzhou/geektime-vue-1 电脑dem ...
- 左耳朵耗子:我为什么要在极客时间 App 开设独家专栏?
参考链接:https://www.infoq.cn/article/2018/01/why-geektime 不少朋友都知道我在极客时间App 上开了一个收费专栏<左耳听风>,这个专栏会开 ...
- 极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间
极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间 笔记体会: 方案一,事务相 ...
- Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记
极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...
- Mysql实战45讲 04讲深入浅出索引(上)读书笔记 极客时间
极客时间 Mysql实战45讲 04讲深入浅出索引 极客时间(上)读书笔记 笔记体悟 1.索引的作用:提高数据查询效率2.常见索引模型:哈希表.有序数组.搜索树3.哈希表:键 - 值(key - v ...
随机推荐
- HyperLogLog
数据量一大,连统计基数也成了一个麻烦事.在使用kylin的时候,遇到对度量值进行基数统计,使用的是Hyperloglog算法,占用内存小,误差小,实乃不错的方法,但查阅网上的资料与内容,感觉未能理解的 ...
- Amazon
刚接到Recruiter电话,说恭喜,feedback都非常好. 心里大石落地,FLAG / UAT终于完成一家. 接下来就要加倍努力冲刺其他公司了. Mark: (入职以后一定要去地里补发一波面经, ...
- 要是VISUAL STUDIO 2015带这些功能就好了
visual studio 2015 正式版立即就要出来了,事实上我原来满期待微软能出一套完美的移植的ANDROID和IOS应用的技术方案,这样WIN10正式版出来后,有一套比較好的移植框架,大家能够 ...
- c++ clr编译dll在c#调用时出现“试图加载不正确的格式”“找不到dll”错误的解决
用depends发现缺了一堆API-MS-WIN什么的dll,网上查找是因为少了VC++2010,VC++2015等一系列,装好后仍然不行,原来这种错误并不是该原因导致的,也并不缺少那些dll(dep ...
- C# 内存理论与实践
The C# Memory Model in Theory and Practice Best Practices All code you write should rely only on the ...
- JPA 不生成外键
在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联.但jpa在处理建立外键 ...
- Oracle 11g EM删除重建的方法
虚拟机里的Oracle 11g好长时间没用了,突然打开之后发现EM无法访问了,EM可以重建,于是也不打算查找原因了,直接使大招 OS:Windows Server 2012 Oracle:11g R2 ...
- Linux系统备份与恢复
序言:前面一篇文章简单地介绍了Linux系统备份与恢复的相关概念,这里接着上一篇介绍两个常用的备份与恢复命令. 1 常见的备份命令 在介绍下面的备份恢复命令之前先简单的说明一下: 如果我们只是要实现 ...
- 上网爱快?EasyRadius FOR 爱快V2接口测试版正式推出,欢迎广大爱迷们测试噢
…… …… 有些人问:为什么上面要打省略号?那些因为此处省略无数字,但是我还是要和大伙们谈谈EasyRadius支持爱快的故事 早在2013年的时候,我们内部就有发布爱快接口,但是由于当时V1的爱快, ...
- Ubuntu系统搭建SVN服务器
Ubuntu系统搭建SVN服务器 参考地址:http://git.devzeng.com/blog/aliyun-ubuntu-svn-server.html 安装软件 依次在终端中执行下面的命令安装 ...