JS基本概念笔记 | 青训营笔记

35 阅读2分钟

JS的基本概念

JS的诞生

诞生:1995年,Brendan Eich开发

1.借鉴C语言的基本语法

2.借鉴Java语言的数据类型和内存管理

3.借鉴Scheme语言,将函数提升到"第一等公民”(first class)的地位

4.借鉴Self语言,使用基于原型(prototype)的继承机制

JS的数据类型

分为对象和基础类型两大类

  • 对象

    • 数组
    • 函数
    • ...
  • 基础类型

    • String
    • undefined
    • number
    • boolean
    • null
    • symbol
    • bigInt

复杂数据类型的原始值可以被改变,但是基础数据类型的不行(const 定义的),复杂数据类型其实是指向的一个地址,原始值改了但是那个地址的指向没有改。

JS的作用域

作用域就是变量的可访问性和可见性,分为

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

变量提升

变量提升就是在后面声明的变量,在js运行的过程中会默认提升到最顶端,因此我们在阅读代码的时候会认为是先调用再定义。

var、函数声明有变量提升,let、const、函数表达式没有变量提升 例如:(在node环境下执行)

console.log("message1",message1); // undefined?
var message1 = "this is var";

let message2 = "this is let"; 
console.log("message2",message2); // this is let


console.log("message3",message3);
const message3 = "this is const";  // 报错

函数也是类似,function定义有提升,但是 const s = function() 没有

JS的进阶知识点

闭包

简单的说,闭包就是函数嵌套,外层函数里 return了内层函数,而内层函数里使用了外层函数变量; (目的:使得外部函数可以拿到或者使用内部函数的变量)

this指向

我们需要知道一点:

  1. this的绑定和定义的位置(编写的位置)没有关系;
  2. this的绑定和调用方式以及调用的位置有关系;
  3. this是在运行时被绑定的; 绑定this可以分为4类
  • 默认绑定:独立函数调用的时候,指向的是window(严格模式下,独立调用的函数中的this的指向的undefined)
  • 隐式绑定:通过某个对象发起的调用(也就是谁调用了,指向谁)
  • 显示绑定:使用apply、bind等函数告诉js我的this指向谁
  • new绑定:new创建一个新对象后,新对象会被绑定到函数调用的this上(this绑定在这里完成)