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