2019-01-30
在讲语义之前,我们来说说为什么要用语义。
现在我们很多的前端工程师写起代码来,多数都不用复杂的语义标签, 只靠 div 和 span 就能走天下了。
这样做行不行呢?毫无疑问答案是行。那这样做好不好呢?按照正确的套路,我应该说不好,但是在很多情况下,答案其实是好。
这是因为在现代互联网产品里,HTML 用于描述“软件界面”多过于“富文本”,而软件界面里的东西...
Read More
2019-01-29
在一些通用的计算机语言设计理论中,能够出现在赋值表达式右边的叫做:右值表达式(RightHandSideExpression),而在 JavaScript 标准中,规定了在等号右边表达式叫做条件表达式(ConditionalExpression),不过,在 JavaScript 标准中,从未出现过右值表达式字样。
JavaScript 标准也规定了左值表达...
Read More
2019-01-29
表达式语句实际上就是一个表达式,它是由运算符连接变量或者直接量构成的(关于直接量我们在下一节详细讲解)。一般来说,我们的表达式语句要么是函数调用,要么是赋值,要么是自增、自减,否则表达式计算的结果没有任何意义。
PrimaryExpression 主要表达式首先我们来给你讲解一下表达式的原子项:Primary Expression。它是表达式的最小单位,...
Read More
2019-01-29
概览
普通语句:
声明型语句:
声明型语句跟普通语句最大区别就是声明型语句响应预处理过程,普通语句只有执行过程。
普通语句语句块我们可以这样去简单理解,语句块就是一对大括号。
12345{ var x, y; x = 10; y = 20;}
空语句空语句就是一个独立的分号,实际上没什么大用。我们来看一下:
1;...
Read More
2019-01-29
3## 脚本和模块
首先,JavaScript 有两种源文件,一种叫做脚本,一种叫做模块。这个区分是在 ES6 引入了模块机制开始的,在 ES5 和之前的版本中,就只有一种源文件类型(就只有脚本)。
脚本是可以由浏览器或者 node 环境引入执行的,而模块只能由 JavaScript 代码用 import 引入执行。
从概念上,我们可以认为脚本具有主动性(调...
Read More
2019-01-29
自动插入分号规则自动插入分号规则其实独立于所有的语法产生式定义,它的规则说起来非常简单,只有三条。
要有换行符,且下一个符号是不符合语法的,那么就尝试插入分号。
有换行符,且语法中规定此处不能有换行符,那么就自动插入分号。
源代码结束处,不能形成完整的脚本或者模块结构,那么就自动插入分号。
举两个例子🌰:
1234let a = 1void funct...
Read More
2019-01-29
文法是编译原理中对语言的写法的一种规定,一般来说,文法分成词法和语法两种。
词法规定了语言的最小语义单元:token,可以翻译成“标记”或者“词”,我统一把 token 翻译成词。
从字符到词的整个过程是没有结构的,只要符合词的规则,就构成词,一般来说,词法设计不会包含冲突。词法分析技术上可以使用状态机或者正则表达式来进行。
概述我们先来看一看 Java...
Read More
2019-01-29
Completion 类型1234567891011function foo(){ try{ return 0; } catch(err) { } finally { console.log("a") }}console.log(foo()...
Read More
2019-01-29
函数的执行我们今天要讲的知识在网上有不同的名字,比较常见的可能有:
闭包;
作用域链;
执行上下文;
this 值。
实际上,尽管它们是表示不同的意思的术语,所指向的几乎是同一部分知识,那就是函数执行过程相关的知识。我们可以简单看一下图。
闭包闭包翻译自英文单词 closure,这是个不太好翻译的词,在计算机领域,它就有三个完全不相同的意义:编译原理中...
Read More
2019-01-29
在 ES3 和更早的版本中,JavaScript 本身还没有异步执行代码的能力,这也就意味着,宿主环境传递给 JavaScript 引擎一段代码,引擎就把代码直接顺次执行了,这个任务也就是宿主发起的任务。
但是,在 ES5 之后,JavaScript 引入了 Promise,这样,不需要浏览器的安排,JavaScript 引擎本身也可以发起任务了。
由于我...
Read More