Javascript高级总结

这篇博客深入探讨了JavaScript的高级概念,包括数据类型、内存管理、变量提升、执行上下文、作用域链、闭包和对象继承。详细阐述了基本数据类型、引用数据类型以及大整数和Symbol的区别。此外,还解析了函数、构造函数原型链以及变量提升和函数提升的机制。文章进一步讨论了执行上下文栈的工作原理和作用域与执行上下文的区别。最后,介绍了闭包的概念、作用以及如何释放闭包,同时给出了经典的面试题和对象继承的示例。
摘要由CSDN通过智能技术生成

一、数据类型

数据类型分类:基本数据类型引用数据类型大整数Symbol

  • 基本数据类型:NumberStringBooleanUndefinedNull,其中UndefinedNull不常用;上述五种数据类型在typeof作用下分别返回"number"、"string"、"boolean"、"undefined“和”object";
  • 引用数据类型:Object(’Object‘、‘Function’和’Array’),在typeof作用下返回"object";
  • 大整数:BigInt,在typeof作用下返回"bigint";
  • Symbol:Symbol,在typeof作用下返回"symbol";

二、数据、内存、变量

  • 数据:将实体事物以二进制的形式存储于计算机中的’东东’;
  • 内存:我们通常所指的是临时内存(内存条通电后分配的内存空间),固态硬盘是永久存在的。内存分类为栈和堆内存空间,用于存储相应的数据类型数据;
  • 变量:由变量名和变量值组成;
    总结:数据存储于内存当中,变量是这个数据的标识符,通过这个标识符可以读写操作内存中的数据;

三、对象

对象是一个事物的属性及行为描述的封装体;

四、函数

函数是一个功能模块封装及实现的封装体;

五、构造函数之原型链

  • 一切函数都是通过new Function()产生(包括函数Function本身,Object也是通过new Function()产生);
  • A instanceof B:其结果返回true,表示确定A对象是B类的实例或者说实现了某个特定的接口,那么返回true需要满足的条件是B类的显示原型与A对象的隐式原型链有交集;下面是instanceof案例:
Function instanceof Function // true(注意:Function.__proto__ === Function.prototype,唯一一个对象本身的隐式原型和显示原型相等)
Function instanceof Object // true
Object instanceof Object // true
Object instanceof Function // true
Array instanceof Array // false
Array instanceof Function // true
Array instanceof Object // true
let arr = new Array();
arr instanceof Array // true
arr instanceof Object // true
arr instanceof Function // false
let obj = {
   }; // 等同于let obj = new Object();
obj instanceof Object // true
obj instanceof Function // false

六、变量提升、函数提升

  • var来声明的变量名存在变量提升:
console.log(a); // undefined
var a = '变量提升';
  • 用此方式声明的函数存在函数提升:
a(); // '函数提升'
function a() {
   
   console.log('函数提升');
}
  • 先变量提升,后函数提升
var c = 1;
function c(c) {
   
	console.log(c);
}
c(2); // 报错:c is not a function
  • var声明的变量挂载于何处?
if(!(b in window)) {
   
	var b = 1;
}
console.log(b); // undefined 因为非模块化环境下运行,var存在变量提升并且没有代码块这个概念,所以上面语句先`var b;`(var声明的变量会在全局变量挂载和window对象下挂载这个属性,所以此时打印window.b为undefined),然后`if(!(b in window)) {b=1}`,最后打印`console.log(b)`为undefined;如果是在模块化环境下运行,在运行到if判断语句时就会报出b is not defined;

七、执行上下文、执行上下文栈

  • 执行上下文: 全局执行上下文、函数执行上下文和eval函数执行上下文(此上下文不推荐使用及产生);
  • 执行上下文栈:由全局执行上下文和函数执行上下文的执行形成的一个栈结构,遵循后进先出原则;
    **注意:**执行上下文栈存在“栈溢出”,造成这样的结果是函数多次递归调用的原因;

八、作用域、作用域链

  • 作用域就是一个封闭的空间,外界不能读写这个空间的数据(闭包除外);
  • 作用域的产生:全局作用域和代码块、函数形成的局部作用域;
  • 作用域与执行上下文的区别:作用域是“静态的”,执行上下文是“动态的”。所谓静态就是代码在运行前,作用域就已经产生(n+11代表的是全局作用域,n代表的是局部作用域),函数所能访问到的上层作用域在函数声明定义时就已经确定了,函数声明在哪里,上层作用域就在哪,和函数在哪里调用没有任何关系(闭包);所谓动态就是执行上下文是在代码运行过程中产生(n+11代表全局执行上下文,n代表函数执行上下文和eval函数执行上下文)。
function test() {
   
	x = 999;
	function a() {
   
		console.log
  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值