深入理解JS | 青训营笔记

44 阅读2分钟

1、JS是浏览器中运行的一种语言,它的出现使网页交互多样化,网页的浏览体验大大提高。 JS线程运行在渲染进程,JS被设计为单线程,出于以下三点:

  • 简化并发问题;
  • 避免浏览器环境的限制;
  • 通过事件循环机制实现异步编程。

简化并发问题是JavaScript设计单线程的主要原因,这可以有效避免产生竞态条件和死锁等问题。

2、JS是一种动态、弱类型的语言,同时它还有面向对象和函数式编程的特点。它是解释型的语言,它采用JIT(Just-in-time compilation)即时编译技术,把常用的代码转化为机器码,大大提高了运行速度。具体来讲,当JavaScript引擎监测到某段代码执行多次,就把这段代码标为warm,很频繁的运行的代码标记为热点代码。

3、JavaScript的变量的作用域有三种,分别是:

  • 全局作用域
  • 函数作用域
  • 块级作用域

4、JavaScript的变量有“变量提升”这个特性。用var声明的变量有“变量提升”的特性,即使某个变量在定义之前被访问,仍然是可行的。但是let、const修饰的变量没有变量提升,提前访问会报错。注意:赋值给变量的函数无法提前调用,下边的代码会报错:

foo(); // TypeError: foo is not a function
var foo = function() {
  console.log("Hello, world!");
};

而这段代码不会报错:

foo(); // "Hello, world!"
function foo() {
  console.log("Hello, world!");
}

5、当JS引擎解析到可执行代码,,就会做一些执行前的准备工作,这个工作叫做“执行上。下文”,

  • 全局执行上下文:代码开始执行时就会创建将它压入执行栈的栈底,每个生命周期内只有一份。
  • 函数执行上下文当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境。当函数执行结束时,该执行环境从栈顶弹出。

6、词法环境、变量环境

词法环境用来存储var变量绑定,变量环境被用来存储函数声明和变量。