从零开始学前端:javascript解析与执行过程

从事前端工作,也有近两年时间,但对前端知识体系没有系统学习或整理。为了巩固自己的基础以及更深入学习前端的技术,博主将从零开始学前端。并将学习过程记录以及所有知识点记录在《从零开始学前端》系列帖子。


预处理(编译)

创建一个词法环境,对所有声明的变量和函数(var 表达式和 function 声明)进行处理,并添加到词法环境中。

词法环境

将var创建的变量和声明方式创建的函数提到作用域最前面
变量只进行声明,默认值为undefined
函数则指向函数的一个引用

变量
console.log(a); // 控制台打印 undefined
console.log(b); // 控制台打印 undefined
console.log(c); // 报错 Uncaught ReferenceError: c is not defined
console.log(window.c); // 控制台打印 undefined
var a = 'this is a'; // 已赋值
var b; // 未赋值
c = 'this is c'; // 全局变量

var关键字声明的变量作用域会提前,如果在赋值语句之前调用则值为undefined
全局变量(window对象的属性)如果在赋值前调用会报错
全局变量已添加到window对象中,值为undefined

函数
// 1.函数声明创建
a(); // this is a
function a() {
	console.log('this is a');
}
// 2.函数表达式创建
b(); // Uncaught TypeError: b is not a function
var b = function() {
	console.log('this is b');
}

函数声明方式创建的函数可在创建语句前调用
函数表达式创建的函数只能在创建语句后调用

执行期

js解释器按代码块从头至尾执行js代码

执行变量的赋值语句,将undefined替换成定义的值
执行函数调用语句时,完成函数的调用

猜你喜欢

转载自blog.csdn.net/wq18512847606/article/details/82773764