YoungZhang's Blog


  • Home

  • About

  • Tags

  • Categories

  • Archives

深入JS之bind的实现

Posted on 2018-07-21 | In ES5 |

bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值,并在调用新函数时提供任何前面提供的给定参数序列。语法:fun.bind(thisArg[, arg1[, arg2[, …]]])

Read more »

深入JS之call和apply的实现

Posted on 2018-07-21 | In ES5 |

1. call的模拟实现

call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。语法:fun.call(thisArg, arg1, arg2, …);

Read more »

怎么改变this的指向

Posted on 2018-07-20 | In ES5 ES6 |

call和apply的作用都是在函数运行时指定this值,注意:指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。

Read more »

深入JS之this

Posted on 2018-07-19 | In ES5 ES6 |

从《深入JS中的作用域和执行上下文》中可以得知,当JS引擎执行一段JS可执行代码时,会创建对应的执行上下文。而在创建执行上下文的过程中,要经历三个步骤:创建变量对象、建立作用域链以及确定this指向。

由上,首先记住一句话,this,是在创建执行上文时被确定的。而执行上下文,从《深入作用域链》中可以知道是在函数被激活(调用)的时候才被创建的。

在绝大多数情况下,函数的调用方式决定了this的值。this不能在执行期间被赋值,并且在每次函数被调用时this的值也可能会不同。 ——引自MDN

Read more »

深入闭包

Posted on 2018-06-24 | In ES5 |

定义

《JS忍者秘籍》中对闭包的定义为:

闭包实际上是一个作用域,在创建时允许其自身的变量和函数访问其自身之外的变量时的作用域。

所以,闭包是由两部分组成的:

闭包 = 函数 + 函数能够访问的自有变量

看个例子:

Read more »

深入作用域链

Posted on 2018-06-24 | In ES5 |

作用域链

当查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。

接下来以一个函数的创建和激活两个时期来看作用域链式如何创建和变化的~

函数创建

函数的作用域在函数定义的时候就决定了,因为函数有一个内部属性[[scope]],当函数创建的时候,就会保存所有父变量到其中,可以理解为父变量对象的层级链,但是[[scope]]并不代表完整的作用域链。

Read more »

深入JS中的作用域和执行上下文

Posted on 2018-06-24 | In ES5 |

作用域:代码中定义变量的区域,确定执行代码访问变量的权限。

JS采用词法作用域(静态作用域),所以函数的作用域在函数定义的时候就决定了,也就是说函数的作用域基于函数创建的位置。相对的是动态作用域,函数的作用域在函数调用的时候决定。

作用域分类:全局作用域、函数作用域和eval()作用域(不讨论)

JS代码的整个执行过程,分为两个阶段:代码编译阶段和代码执行阶段。编译阶段由编译器完成,将代码翻译成可执行代码。执行阶段由js引擎完成,主要任务是执行可执行代码,执行上下文在这个阶段创建。

Read more »

Vuex源码解读之store

Posted on 2018-06-05 | In 前端框架 |

解读目标

store对象中有个属性叫state,state包含了全部的应用层级状态。应用中的各个组件如果使用了state,则会保持与同步最新的状态。state就像是Vue中的data,但是state其实是整个Vue应用的data。有个例子:比如说现在有两个非父子关系的子组件a和b,a和b中都监听了state.count,如果a中修改了state.count,那么b中的state.count也相应的会改变。接下来想要探究的问题就是Vuex是如何监听各个组件中的state属性的,其实我觉得有可能又是Object.defineProperty在搞事情——

Read more »

Vuex源码解读之install

Posted on 2018-06-05 | In 前端框架 |

解读目标

在根实例中注册store选项,该store实例会注入到格努组件下面的所有子组件中,并且子组件都能通过this.$store访问,那为啥它们都可以通过this.$store就能访问到store选项?从入口文件开始——

Read more »

解锁js数组去重的多种方法

Posted on 2018-06-01 | In JS手撕 |

方法一:双重循环+新建数组(1)

思路:新建一个数组存放返回的去重后的数组,设置一个标志来标识原数组和新数组中的元素是否重复,外层循环控制趟数,内层循环控制新数组和原数组元素的比较,如果新数组和原数组的元素相同,标志位置true,并跳出当前循环,如果新数组和原数组元素不同,执行完当前循环后,将外层循环变量指向的元素push进新数组

Read more »
12345

YoungZhang

越努力越幸运~

42 posts
13 categories
64 tags
GitHub E-Mail Google Instagram
© 2018 YoungZhang
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4