bling
bling
1. 什么是「闭包」 2. 「闭包」的作用是什么? #### 什么是闭包 ```js (function () { var local = 'variable' //在函数内部可以访问的变量 function foo () { // 函数 console.log(local) } })() ``` 上述三行代码在一个立即执行函数中,这里有一个局部变量local,有一个函数foo,foo里面可以访问到local变量,这就是一个闭包。 > 「函数」和「函数内部可以访问到的变量」(也叫环境)的总和,就是一个闭包 再来看看嵌套函数的情况 ```js...
先来看你一段JS代码 ```js console.log('script start') setTimeout(function () { console.log('setTimeout') }, 0) Promise.resolve() .then(function () { console.log('promise1') }) .then(function () { console.log('promise2') }) console.log('script end') ``` 会输出什么呢?结果如下 ``` script start script end...
首先要知道 `new` 做了什么 1. 创建一个新的对象,并且继承构造函数的 prototype ,这里是为了继承构造函数原型上的属性和方法 2. 执行构造函数,方法内的 this 被指定为该新实例,这是为了执行构造函数内的赋值操作 3. 返回新实例,如果构造函数方法返回一个对象,那么返回该对象,否则返回第一步创建的新对象 ```js // new 是关键字,可以模拟 new Foo(args) = myNew(Foo, args) function myNew (foo, ...args) { /** * 创建新对象,并继承构造方法的prototype属性...
当一听到继承的时候,最容易想到的就是 ES6 的 `extends`,但是如果要从函数和原型链的角度上实现继承的话应该怎么做呢? #### 原型链继承 原型链继承的原理其实很简单,就是直接让子类的原型对象指向父类实例,如果子类实例找不到对应的属性和方法的时候,就会往原型对象上面去找,也就是父类的实例上找,这样就实现了对父类的属性和方法的继承。 ```js // 父类 function Parent () { this.name = 'parent name' } // 父类原型方法 Parent.prototype.getName = function () { return this.name } //...
> `Promise` 表示一个异步操作的最终结果,和`Promise`最主要的交互方式方法是通过传入它的 `then` 方法从而获取 `Promise` 最终的值或 `Promise` 最终拒绝的原因。 #### Promise 声明 首先,Promise肯定是一个类 * promise是这么用的!`new Promise((resolve, reject) => {})`,所以这个参数(也就是函数)可以叫 `executor`,传进去就执行 * executor里面有两个参数,一个叫resolve(成功),一个叫reject(失败) * 两个参数都是可以执行的,所以要先声明一下 ```js class Promise { constructor (executor)...
一句话概括 call、apply、bind 主要就是改变this的指向 #### call call语法: > fun.call(thisArg, arg1, arg2, ...),调用一个函数,具有一个指定的this值和干个指定的参数值(参数列表) ##### 例子 ```js var foo = { value: 1 } function bar () { console.log(this.value) } bar.call(foo) // 1...