JavaScript概述 | 青训营笔记

74 阅读2分钟

作用

在 Web 页面上实现复杂的功能,使用函数等进行动态页面创建

eg: 滚动的视频播放器、提示框显示、按钮登录

特点

解释型语言,博主更喜欢称之为即时性语言,即js内部使用JIT(just-in-time),使得运行速度大幅提升

动态语言:最大特点,不确定变量类型

eg: number + string -> string, 类型自动转换

let a, b;
a = 100;
b = "200";
console.log(a + b);   //100200

LINK: JavaScript 类型转换 (w3school.com.cn)

JIT (just-in-time)

JS最初为典型解释性语言,运行速度慢,及后来浏览器在 JavaScript engine 中加入一个 monitor,用来观察运行的代码。并记录下每段代码运行的次数和代码中的变量的类型。

标记少数重复与多次重复代码,以“概率”模式进行先前判断

LINK: A crash course in just-in-time (JIT) compilers

Hoisting(变量提升)

JS在执行程序前,会先收集所有变量(不同作用域对应不同类型变量),再执行代码

Var类型(拥有变量提升),变量类型定义会直接附着在Window中,先使用变量 -> 得到undefind

var a;
let b = 999;
const c = 666;
console.log(window);
console.log(window.a === a);   //true

image.png Let和Const(不拥有),在块范围中的变量定义之前使用它时,得到错误。

console.log(a);
{
  a = 200;
  console.log(a);
}
var a = 100;
console.log("=======var使用");

console.log(b);
{
  b = 200;
  console.log(a);
}
let b = 100;

image.png

扩充:

编译(Compiler):

  • 优点:不需要重复编译,并且可以在编译时对代码做优化
  • 缺点:需要提前编译

解释(Interpreter)

  • 优点:快速执行,不需要等待编译
  • 缺点:相同的代码可能被翻译多次,比如循环内部的代码

JS的使用有着各种不同的方向,同时所涉及的知识点也是各种各样的,如: TDZ(暂时性死区)、Boxing & Unboxing(装箱 & 拆箱)、Primitive(原型)、 Closure(闭包)等,希望大家在日后可以共同进步

LINK: 变量提升 && 暂时性死区