JavaScript基础
JavaScript 从 Java 中借用其大部分语法,但也受 Awk,Perl 和 Python的影响。 JavaScript是区分大小写的,并使用 Unicode字符集。在JavaScript中,指令被称为 statements,并用分号 (;)分隔。空格、制表符和换行符被称为空白字符。JavaScript 脚本的源文本是从左到右扫描,并将其转换成由 tokens(不可分割的词法单位)、控制字符、行终止符、注释或空白符组成的输入元素序列。ECMAScript 还定义了某些关键字和字面量,规定了如何自动插入分号(ASI)来结束语句。
javascriptr粗略理解为:ECMAScript语法+DOM+BOM.
javascript语言可以识别7种不同类型的值:
-
- Boolean. 布尔值,
true
和false
. - null. 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此
null
与Null
、NULL
或其他变量完全不同。 - undefined. 变量未定义时的属性。
- Number. 表示数字,例如:
42
或者3.14159。
- String. 表示字符串,例如:"Howdy"
- Symbol ( 在 ECMAScript 6 中新添加的类型).。一种数据类型,它的实例是唯一且不可改变的。
- Boolean. 布尔值,
- 以及 Object 对象
- Object和function是js语言的其他两个基本要素。function本质也是一种对象。可以通过new function()生成函数实例
它的执行过程为先由javascript解释器“预编译”再执行。
当JavaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理。
做如下处理:
1. 在执行前会进行类似“预编译”的操作:首先会创建一个当前执行环境下的
活动对象,并将那些用var申明的变量设置为活动对象的属性,但是此时这些变量的赋值都是undefined,并将那些以function定义的函数也添加为活动对象的属性,而且它们的值正是函数的定义。
2. 在解释执行阶段,遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时则会从prototype链中查找,否则将会按照作用域链查找。遇到var a = ...这样的语句时会给相应的变量进行赋值(注意:变量的赋值是在解释执行阶段完成的,如果在这之前使用变量,它的值会是undefined)
JS全局中的解析和执行过程:
预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处理阶段的词法环境中去。
这些基础概念涉及到对于作用域链的理解,可以多了解下这里面的概念有助于自身更好的学习javascript.