从事前端工作,也有近两年时间,但对前端知识体系没有系统学习或整理。为了巩固自己的基础以及更深入学习前端的技术,博主将从零开始学前端。并将学习过程记录以及所有知识点记录在《从零开始学前端》系列帖子。
预处理(编译)
创建一个词法环境,对所有声明的变量和函数(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替换成定义的值
执行函数调用语句时,完成函数的调用