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变量绑定,变量环境被用来存储函数声明和变量。