0%

概述

我们都知道JS是一种“解释执行”的语言,不同于c++等语言的提前编译,它的编译过程是在JS引擎中完成的(代码执行前进行编译),更多内容可参考:你不知道的JS系列-1

对于所有需要编译的语言来说,都需要提前指定一些规则来设计语言,这些规则就可以称之为“文法”。

文法是编译原理中对语言的写法的一种规定,一般来说,文法分成词法和语法两种。词法规定了语言的最小语义单元:token,可以翻译成“标记”或者“词”。这里我们统一称为“词”,

我们把视角再转回到JS身上:所有源码中出现的内容包括了:空白符号、换行符、注释、标识符名称、符号、数字直接量、字符串直接量、正则表达式直接量、字符串模板。接下来,编译器在代码执行前就需要对这些内容进行语法分析(拆词)

几点说明

  1. Javascript支持多种空白符号
  2. Javascript只支持四种字符作为换行符
  3. Javascript支持单行注释与多行注释
  4. Javascript中的标识符名称可以以“$”、“_”或者 Unicode 字母开始
  5. Javascript中的字符串直接量支持单引号和多引号两种
  6. Javascript中‘/’不仅可以作为除法,也可以作为正则表达式,所以词法分析器需要两套词法
  7. Javascript中模板字符串也需要单独的词法来处理
  8. Javascript支持数字直接量,不过对于12.toString()这种写法要人为处理,否则默认词法会将12.划分为一个“token”,从而引发异常

闭包

闭包其实只是一个绑定了执行环境的函数,闭包与普通函数的区别是,它携带了执行的环境,就像人在外星中需要自带吸氧的装备一样,这个函数也带有在程序中生存的环境。

阅读全文 »

面向对象与基于对象

什么是面向对象

Object(对象)在英文中,是一切事物的总称,这和面向对象编程的抽象思维有互通之处。

在《面向对象分析与设计》这本书中,Grady Booch 替我们做了总结,他认为,从人类的认知角度来说,对象应该是下列事物之一:

  1. 一个可以触摸或者可以看见的东西;
  2. 人的智力可以理解的东西;
  3. 可以指导思考或行动(进行想象或施加动作)的东西。

有了对象的自然定义后,我们就可以描述编程语言中的对象了。在不同的编程语言中,设计者也利用各种不同的语言特性来抽象描述对象,最为成功的流派是使用“类”的方式来描述对象,这诞生了诸如 C++、Java 等流行的编程语言。而 JavaScript 早年却选择了一个更为冷门的方式:原型。

阅读全文 »

何谓脚手架?

在前端工程化高度发展的当代,各种构建工具大行其道,webpack、gulp、rollup、fis等,这些构建工具的主要作用就是将前端代码工程化,实现代码编译,文件优化,模块分割,自动刷新,代码校验,自动发布等供嫩,我们在实际开发中,要根据自己的需求定制不同的配置,但是多数情况下,项目配置在不同的项目中改动不大,有些甚至不需要做任何修改。这个时候,开发不同的项目,我们需要将这些配置重新拷贝一遍,于是,为了减少重复性工作,脚手架的概念应运而生。

对于vue-cli,create-react-app,或者自己开发的工具,

脚手架的定位基本是一致的:创建项目初始文件

脚手架作用是:创建项目的初始文件,本质是方案的封装

阅读全文 »

CSSOM API 的基本用法

一般来说,我们需要先获取文档中所有的样式表:

document.styleSheets

document 的 styleSheets 属性表示文档中的所有样式表,这是一个只读的列表,我们可以用方括号运算符下标访问样式表,也可以使用 item 方法来访问,它有 length 属性表示文档中的样式表数量。

重学前端-CSS部分-CSSDOM

阅读全文 »