JS高级---day021.闭包1.1闭包的作用 实现了早期的模块化开发,把所有的变量隐藏在内部,对外暴露统一的访问接口 隐藏变量,避免全局污染---[ES6自带模块化开发] 1.2闭包的优缺点优点:隐藏变量,避免全局污染,实现早期的模块化开发 缺点:一旦形成了闭包,这个变量不会被内存释放,内存开销较大,不会被垃圾回收机制回收,会造成内存泄漏,不建议过多使用闭包 2.面向对象思想2.1面向过程POP按照流程步骤,一步一步的走,实现功能,每一步都是亲历亲为 优点:对流程细节把控清晰 缺点:不适合大型项目 2.2面向对象OOP从全局出来,那所用功能都封装在对象中,然后要做什么就找什么对象,调用对象的方法 优点:所有的功能都封装在对象中,适合大型项目 缺点:对细节把控不清晰 3.类和构造函数3.1概念1.构造函数再js中,可以成为类 2.js内置的构造函数:Array、String、Number、Function、Object、Date、Boolean、Error.... 3.作用:造出各种各样类型的数据,造:new处理,实例化出来,new各种实例对象,得到各种类型的数据 4.如果js内置没有这个构造函数,自己如何创建一个构造函数 3.2特点1、构造函数首字母大写2、属性和方法都挂在this上3、没有返回值4、使用new调用 3.3类和实例对象的关系 var str = 'abc';
console.log(str.constructor);
const a = true;
console.log(a.constructor);
//构造函数
// str.constructor === String;
// a.constructor === Boolean;
// 字面量:
let str1 = 'abcd';
let flag1 = true;
// 真相:
let str2 = new String('abcd').valueOf();
let flag2 = new Boolean(true).valueOf();
在ES5中类===构造函数
字面量的数据类型都是底层通过new实现的
赋值通过valueof
constructor===构造函数
构造函数,不是对象
内置的类都是大写开头的
不是所有的数据类型都是类===undefined null
3.3new过程发生了什么---[面试题]1.首先会创建一个空对象
2.this指向实例对象
3.执行构造函数的代码---这里面的代码全部走一遍
4.自动返回了this---指向实例对象 |