美文网首页
重学前端——语法

重学前端——语法

作者: zhangyr_8897 | 来源:发表于2020-03-13 14:34 被阅读0次

分号

1. 自动插入分号规则
(1)有换行符,且下一个符号是不符合语法的,自动插入分号;
(2)有换行符,且语法中规定此处不能有换行符,自动插入分号;
1)带标签的continue语句,不能在continue后插入换行;
2)带标签的break语句,不能在break后插入换行;
3)return后不能插入换行;
4)后自增、后自减运算符前不能加入换行
5)throw和Exception之间不能插入换行
6)凡是async关键字,后面都不能插入换行
7)箭头函数的箭头前,也不能插入换行
8)yield之后,不能插入换行
(3)源代码结束处,不能形成完整的脚本或模块结构,自动插入分号;

2. 带换行符的注释也被认为是有换行符
return 和 结果之间有换行的注释,则返回undefined。

3. 不写分号需要注意的情况
(1)以括号开头的语句
(2)以数组开头的语句
(3)以正则表达式开头的语句
(4)以Template开头的语句

export

1. 模块和脚本
(1)模块和脚本之间的区别在于是否包含import和export
(2)脚本具有主动性的JavaScript代码段,是控制宿主完成一定任务的代码;而模块是被动性的JavaScript代码段,是等待被调用的库。
(3)现代浏览器支持script标签引入模块或脚本。如果引入模块,必须给script标签添加type=“module”。如果引入脚本,则不需要type。
(4)脚本中可以包含语句。模块中可以包含三种内容:import声明,export声明和语句。

2. import声明
(1)直接import一个模块

import “mod”

只是保证这个模块被执行,无法获得任何信息
(2)带from

import v from “mod”

引入模块中的一部分信息,可以把它们变成本地的变量

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

3. 函数体
(1)普通函数体

function foo() {}

(2)异步函数体

async function foo() {}

(3)生成器函数体

function *foo() {}

(4)异步生成器函数体

async function *foo() {}
image

4. 预处理
代码都是先编译在执行,实际上变量和函数声明在代码里的位置是不会变的,而且是在编译阶段被JavaScript引擎放入内存中。

var声明

1) 函数体级var定义的不会访问外层
2) var作用能够穿透一切语句结构,除了脚本、模块和函数体
面试题:文档添加20个div元素,绑定了点击事件,打印序号

for(var i = 0; i < 20; i++) {
     void function(i) {
          var div = document.createElement('div')
          div.innerHTML = i
          div.onclick = function() {console.log(i)}
          doument.body.appendChild(div)
     }(i)
}
function声明
console.log(foo)
function foo() {}
// foo() {}
console.log(foo)
if(true) {
    function foo() {}
}
// undefined
class声明
console.log(c)
class c {}
// c is not defined
var c = 1
function foo() {
   console.log(c)
   class c {}
}
foo()
//报错:c不可以在初始化之前使用
指令序言机制

'use strict'

用 babel,分析一段 JavaScript 的模块代码,并且找出它中间的所有 export 的变量。

语句

image image

break用于跳出循环或switch语句,continue用于结束本次循环并继续循环

var的规则:

声明同时必定初始化;尽可能在离使用的位置近处声明;不要在意重复声明;

class默认内部函数定义都是strict模式的

生成器函数可以理解为返回一个序列的函数,底层是iterator机制。

表达式语句

原子项

基本类型的直接量

"abc"
123
null
true
false

直接量的形式定义对象

({})
(function(){})
(class{ })
[]
/abc/g

this或变量(标识符引用)

this
myVar

任何表达式加上()

(a + b)
成员表达式

用于访问对象成员

a.b
a["b"]
new.target
super.b
f`a${b}c`
new Cls()
new 表达式
new new Cls(1)
// 等价于
new (new Cls(1))
函数调用表达式
a.b(c)
super()
a.b(c)(d)(e)
a.b(c).d
a.b(c)`xyz`

函数调用表达式比new表达式优先级低

左值表达式
a() = b
a().c = b
赋值表达式
a = b
a = b = c = d
// 等价于
a = (b = (c = d))
a += b
运算符表达式 0397a1bd093f91618c30f5afc93a8b0.png

表达式

更新表达式

++、--

一元运算表达式
delete a.b
void a
typeof a
-a
~a
!a
await a
乘方表达式
++i ** 30
2 ** 30 // 正确
-2 ** 30 // 报错
4 ** 3 ** 2 // 等价于 4 ** (3 ** 2)
乘法表达式(除法、取余)
加法表达式
移位表达式
<<向左移位
>>向右移位
>>>无符号向右移位
关系表达式
<=
>=
<
>
instanceof
in
相等表达式
==
!=
===
!==

相关文章

  • 重学前端——语法

    分号 1. 自动插入分号规则(1)有换行符,且下一个符号是不符合语法的,自动插入分号;(2)有换行符,且语法中规定...

  • 重学前端-----css语法

    CSS 语法的最新标准,你可以戳这里查看:https://www.w3.org/TR/css-syntax-3/我...

  • “学这么多没用的,你就是想装逼”

    最近在学习 winter 老师的《重学前端》,里面的内容很有深度,仅仅是前端的知识,就从编译原理,语法解析,标准等...

  • 重学前端

    参考:重学前端 列一份前端知识架构图 用一定的词法和语法,表达一定语义,从而操作运行时。 运行时 = 数据结构 +...

  • 《重学前端》读后感(开篇词)

    前段时间前端领域大火的课程《重学前端》,相信学习前端的同学都不陌生,尤雨溪、玉伯等顶级大佬都推荐跟着作者重学前端路...

  • 重学前端(一)前言

    前言 重学前端是 winter 大神在极客学院开的一门课,虽然是重学“前端”,但是大神说的方法其实也适用于学习各个...

  • 重学前端

    一、类型和对象 1 类型 1.1 概述 javascript语言中,有6种基本类型和1种引用类型。引用类型还可以细...

  • 重学前端

    https://time.geekbang.org/column/article/77345 开篇词 | 从今天起...

  • 重学前端

    分享大佬的前端知识框架 有兴趣可以一起加入学习

  • 《重学前端》笔记: 000 开篇

    《重学前端》笔记: 开篇 开篇词 + 架构路线 + 学习路径 开篇词 | 从今天起,重新理解前端 前端发展史:从青...

网友评论

      本文标题:重学前端——语法

      本文链接:https://www.haomeiwen.com/subject/dhfdqhtx.html