From 203c5385656f684624565b354383d3273b85a14e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=8E=E4=BC=9F?= <1931626338@qq.com> Date: Thu, 3 Nov 2022 12:51:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=80=92=E5=BD=92=EF=BC=8C=E4=B8=A5?= =?UTF-8?q?=E6=A0=BC=E5=87=BD=E6=95=B0=EF=BC=8C=E9=93=BE=E5=BC=8F=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\346\254\241\344\275\234\344\270\232.html" | 55 ++++ ...\346\254\241\344\275\234\344\270\232.html" | 62 ++++ .../2022-10-31 \351\227\255\345\214\205.md" | 157 ++++++++++ ...45\346\240\274\345\207\275\346\225\260.md" | 274 ++++++++++++++++++ 4 files changed, 548 insertions(+) create mode 100644 "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" create mode 100644 "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" create mode 100644 "12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-10-31 \351\227\255\345\214\205.md" create mode 100644 "12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-02 \351\223\276\345\274\217\345\207\275\346\225\260\357\274\214\351\200\222\345\275\222,\344\270\245\346\240\274\345\207\275\346\225\260.md" diff --git "a/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" new file mode 100644 index 0000000..996b3ba --- /dev/null +++ "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" @@ -0,0 +1,55 @@ + + + + + + + Document + + + + + + \ No newline at end of file diff --git "a/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" new file mode 100644 index 0000000..7486fc3 --- /dev/null +++ "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" @@ -0,0 +1,62 @@ + + + + + + + Document + + + + + \ No newline at end of file diff --git "a/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-10-31 \351\227\255\345\214\205.md" "b/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-10-31 \351\227\255\345\214\205.md" new file mode 100644 index 0000000..34499dc --- /dev/null +++ "b/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-10-31 \351\227\255\345\214\205.md" @@ -0,0 +1,157 @@ +## 作用域 + +#### 作用域 + +outer.[[scope]]: 每个函数都有作用域(码农看不到,供js内部调用), 其中存储了**执行期的上下文集合** + +执行期上下文:当函数执行前,会创建一个称为执行期上下文的内部对象(AO)。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行元毕,它所产生的执行上下文被销毁。 + +查找变量:从作用域链的顶端依次向下查找。 + +**作用域链**:[[]] + +```js +function outer(){ + function inner(){ + var b = 23; + } + var a = 12; + b(); +} +var global = 100; +a(); +``` + +**作用域详细图解**:https://blog.csdn.net/qq_53225741/article/details/125082166 + +## 闭包 + +```js +function a(){ + var aa = '这是外层函数'; + function b(){ + var bb = '这是中层函数'; + function c(){ + var cc = '这是里层函数,我最先释放'; + } + return c; // + } + b(); +} +//a(); + +var fun = a(); + + +``` + +闭包作用: + +- 实现公有变量 +- 可以做**缓存(存储结构**) 练习4 + +- 可以实现封装(继承) +- 模块化开发,防止污染全局变量, + +闭包缺点:当函数保存在外部时,将会生成闭包,闭包会导致原有作用域链不释放,从而造成**内存泄漏**。 + +```js +//函数内部可以访问外部的全局变量 + //函数外部无法读取函数内部的变量 + // let age = 10; + // function huhu(){ + // console.log(age); + // } + // huhu(); + + //链式作用域结构 + //首先子对象会在自身的作用域寻找变量,如果没有则一层一层的向父级寻找。、 + // var name = '小明' + // function man() { + // console.log(name) + // var age = '20'; + // (function getage() { + // console.log(age) + // }()) + // } + // man() + + //闭包的作用 + //访问局部变量 + // function man(){ + // var age = 20; + // return function(){ + // console.log(age); + // } + // } + // //console.log(age); //报错 + // var huhu = man(); + // huhu(); + + //保存局部变量 + //因为垃圾回收机制的存在,函数执行完成后里面的局部变量会被销毁 + // function get(){ + // var num = 0; + // return function(){ + // console.log(num++); + // } + // } + // var aa = get(); + // aa(); // 0 + // aa(); // 1 + + //实现类的封装 + // function man(){ + // var name = '小明'; + // var age = 15; + // return { + // getName : function (){ + // console.log(name); + // }, + // setName : function (newName){ + // name = newName; + // } + // } + // } + // var huhu = new man(); + // huhu.getName(); + // huhu.setName('张三'); + // huhu.getName(); + + //注意点:内存泄漏 (正常情况下,因为垃圾回收机制,局部变量在函数执行完毕之后其生命周期也结束, + //所以内存会被回收释放。但是因为我们使用了闭包,导致变量一直保存在内存,无法得到释放,造成内存的消耗。) + //退出函数前,将不使用的局部变量删除,或者解除函数的引用 + // function num(){ + // var num = 0; + // return function(){ + // console.log(num++); + // } + // } + // var huhu = num(); + // huhu(); + // huhu(); + // huhu = null; //解除函数的引用,此时变量num释放 +``` + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-02 \351\223\276\345\274\217\345\207\275\346\225\260\357\274\214\351\200\222\345\275\222,\344\270\245\346\240\274\345\207\275\346\225\260.md" "b/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-02 \351\223\276\345\274\217\345\207\275\346\225\260\357\274\214\351\200\222\345\275\222,\344\270\245\346\240\274\345\207\275\346\225\260.md" new file mode 100644 index 0000000..be3175e --- /dev/null +++ "b/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-02 \351\223\276\345\274\217\345\207\275\346\225\260\357\274\214\351\200\222\345\275\222,\344\270\245\346\240\274\345\207\275\346\225\260.md" @@ -0,0 +1,274 @@ +## 作用域 + +#### 作用域 + +outer.[[scope]]: 每个函数都有作用域(码农看不到,供js内部调用), 其中存储了**执行期的上下文集合** + +执行期上下文:当函数执行前,会创建一个称为执行期上下文的内部对象(AO)。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行元毕,它所产生的执行上下文被销毁。 + +查找变量:从作用域链的顶端依次向下查找。 + +**作用域链**:[[]] + +```js +function outer(){ + function inner(){ + var b = 23; + } + var a = 12; + b(); +} +var global = 100; +a(); +``` + +**作用域详细图解**:https://blog.csdn.net/qq_53225741/article/details/125082166 + +## 闭包 + +```js +function a(){ + var aa = '这是外层函数'; + function b(){ + var bb = '这是中层函数'; + function c(){ + var cc = '这是里层函数,我最先释放'; + } + return c; // + } + b(); +} +//a(); + +var fun = a(); + + +``` + +闭包作用: + +- 实现公有变量 +- 可以做**缓存(存储结构**) 练习4 + +- 可以实现封装(继承) +- 模块化开发,防止污染全局变量, + +闭包缺点:当函数保存在外部时,将会生成闭包,闭包会导致原有作用域链不释放,从而造成**内存泄漏**。 + +```js +//函数内部可以访问外部的全局变量 + //函数外部无法读取函数内部的变量 + // let age = 10; + // function huhu(){ + // console.log(age); + // } + // huhu(); + + //链式作用域结构 + //首先子对象会在自身的作用域寻找变量,如果没有则一层一层的向父级寻找。、 + // var name = '小明' + // function man() { + // console.log(name) + // var age = '20'; + // (function getage() { + // console.log(age) + // }()) + // } + // man() + + //闭包的作用 + //访问局部变量 + // function man(){ + // var age = 20; + // return function(){ + // console.log(age); + // } + // } + // //console.log(age); //报错 + // var huhu = man(); + // huhu(); + + //保存局部变量 + //因为垃圾回收机制的存在,函数执行完成后里面的局部变量会被销毁 + // function get(){ + // var num = 0; + // return function(){ + // console.log(num++); + // } + // } + // var aa = get(); + // aa(); // 0 + // aa(); // 1 + + //实现类的封装 + // function man(){ + // var name = '小明'; + // var age = 15; + // return { + // getName : function (){ + // console.log(name); + // }, + // setName : function (newName){ + // name = newName; + // } + // } + // } + // var huhu = new man(); + // huhu.getName(); + // huhu.setName('张三'); + // huhu.getName(); + + //注意点:内存泄漏 (正常情况下,因为垃圾回收机制,局部变量在函数执行完毕之后其生命周期也结束, + //所以内存会被回收释放。但是因为我们使用了闭包,导致变量一直保存在内存,无法得到释放,造成内存的消耗。) + //退出函数前,将不使用的局部变量删除,或者解除函数的引用 + // function num(){ + // var num = 0; + // return function(){ + // console.log(num++); + // } + // } + // var huhu = num(); + // huhu(); + // huhu(); + // huhu = null; //解除函数的引用,此时变量num释放 +``` + +# 2022-11-02 + +## 链式函数 + +## 严格函数 + +# 函数 + +###### call,apply,bind + +改变this指向,函数被执行时,内部会产生一个this + +arguments:伪数组,只有下标,长度,元素是实参的映射 + +实列:(call apply 两者类似) + +```js +function Person(name, age) { + var { name : '张三' ,age:18} + console.log(this); + this.name = name; //obj.name = name; + this.age = age; //obj.age = age; + return {} + } + var obj = {}; +Person.call(obj,'张三',18); +Person.apply(obj, ['张三', 18]); +Person('张三',18); +``` + +实列:bind + +```js + // const module = { + // x: 42, + // getX: function () { + // console.log(this); + // return this.x; //window.x + // } + // }; + + // var x = 99; + //bind + // const unboundGetX = module.getX; + // console.log(unboundGetX()); //42 + // const boundGetX = unboundGetX.bind(module);//函数 调用bind方法,返回一个带this指向的新函数 + // console.log(boundGetX()); +``` + +#### 严格模式('use strict') + +:严格模式:防止意外发生错误时,及时抛出该错误 + +1.在严格模式下,函数内部不会再意外地生成全局变量,而是抛出异常 + +2.严格模式要求一个对象内的所有属性名在对象内必须唯一 + +3.严格模式下会抛出错误,非严格模式会自动转换全局 + +4.构造函数使用严格模式,必须使用new: + +```js + // function Product(name, price) { + // 'use strict' + // this.name = name; + // this.price = price; + // } + // new Product('张三',18); +``` + +函数命名 + +//构造函数:Person() + + //普通函数小驼峰: getNameAge + + //普通变量: personAge perons_age + + //常量:PI + +## 递归 + +**什么是递归:** +如果一个函数在内部可以调用其本身,那么这个函数就是[递归函数](https://so.csdn.net/so/search?q=递归函数&spm=1001.2101.3001.7020)。 +简单理解:函数内部自己调用自己, 这个函数就是递归函数 + +**比如:** + +```js + + //但上面代码报错因为递归很容易发生“栈溢出”错误(stack ),所以必须要加退出条件 return。 +``` + +**递归必须由以下两部分组成。** + +- 递归调用的过程。 + +- 递归终止的条件。 + + 在没有限制的情况下,递归运算会无终止地自身调用。因此,在递归运算中要结合 if 语句进行控制, + 只有在某个条件成立时才允许执行递归,否则不允许调用自身。 + + 递归很消耗内存 + +```js + + +``` + + + + + + + + + + + + + -- Gitee From 4208b99dfe709a00204e9def99de05dc4852e617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=8E=E4=BC=9F?= <1931626338@qq.com> Date: Fri, 4 Nov 2022 12:20:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8E=9F=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\346\254\241\344\275\234\344\270\232.html" | 0 ...\346\254\241\344\275\234\344\270\232.html" | 0 ...\346\254\241\344\275\234\344\270\232.html" | 58 +++++++++++++++ .../2022-11-03 \345\216\237\345\236\213.md" | 71 +++++++++++++++++++ 4 files changed, 129 insertions(+) rename "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" => "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-10-31 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" (100%) rename "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" => "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" (100%) create mode 100644 "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\345\215\201\346\254\241\344\275\234\344\270\232.html" create mode 100644 "12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-03 \345\216\237\345\236\213.md" diff --git "a/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-10-31 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" similarity index 100% rename from "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" rename to "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-10-31 \347\254\254\345\205\253\346\254\241\344\275\234\344\270\232.html" diff --git "a/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" similarity index 100% rename from "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" rename to "12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-02 \347\254\254\344\271\235\346\254\241\344\275\234\344\270\232.html" diff --git "a/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\345\215\201\346\254\241\344\275\234\344\270\232.html" "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\345\215\201\346\254\241\344\275\234\344\270\232.html" new file mode 100644 index 0000000..67696d5 --- /dev/null +++ "b/12 \351\231\210\345\215\216\344\274\237/\344\275\234\344\270\232/2022-11-03 \347\254\254\345\215\201\346\254\241\344\275\234\344\270\232.html" @@ -0,0 +1,58 @@ + + + + + + + Document + + + + + \ No newline at end of file diff --git "a/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-03 \345\216\237\345\236\213.md" "b/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-03 \345\216\237\345\236\213.md" new file mode 100644 index 0000000..b604f38 --- /dev/null +++ "b/12 \351\231\210\345\215\216\344\274\237/\347\254\224\350\256\260/2022-11-03 \345\216\237\345\236\213.md" @@ -0,0 +1,71 @@ +# 2022-11-03 + +## call apply bind + +他们的功能是改变this的指向 + + + + + +## 构造函数和prototype原型 + +构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总和new一起使用。 我们可以把对象中一些公共属性和方法抽取出来,然后封装到这个函数里面。 + +#### new在执行时会做四件事情: + +1. 在内存中创建一个新的空对象 +2. 让this指向这个新对象 +3. 执行构造函数里面的代码,给这个新对象添加属性和方法 +4. 返回这个新对象(所以这个构造函数里面不需要return) + +JS的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this上添加。 通过这两种方式添加的成员,分别称为静态成员和实例成员。 + +- 静态成员 + + 在构造函数本身上添加的成员;只能由构造函数本身来访问 + +- 实例成员 + + 在构造函数内部创建的对象成员称为实例成员(this添加);只能由实例化的对象来访问 ;实例成员就是构造函数内部通过this添加的成员 + +```js +//构造函数 +function fun (name,age){ + this.name + this.age +} +var a = new fun('zs',18) +``` + +## 构造函数 原型对象 prototype + +**1.所有被该构造函数构造出的对象都可以继承原型上的属性和方法**。 + +**2.如果this有自己的属性,那么会覆盖掉原型上已有的属性。**(开发惯例:所有方法写到原型,部分属性写到this)一般来说属性是配置项,需要你主动传参去配置。但是一般来说某个插件的方法功能几乎是一致的。 + +对象对原型的增删改 + +```js +function Phone(color, brand) { + this.color = color; + this.brand = brand; + this.screen = screen; +} +//原型本身也是一个对象 增删改查 +console.log(Phone.prototype); + + //add properties + Phone.prototype.screen = '18:9'; + console.log(Phone.prototype); + +//修改原型上的属性 + Phone.prototype.screen = '20:10'; + console.log(Phone.prototype.screen); + + //删 + delete Phone.prototype.screen; + console.log(Phone.prototype); + +``` + -- Gitee