
深入JavaScript
文章平均质量分 81
让深入理解JS的各种难点,包括:作用域链、环境栈、执行上下文的变化、闭包、参数共享传值、原型及原型链、call\apply\bind等等的深入
白小宇
学识的基础是创造的基础。
展开
-
深入JavaScript 继承的各种方式及优缺点
一、原型链继承1、优点可以函数复用function Parent () { this.name = 'kevin';}Parent.prototype.getName = function () { console.log(this.name);}function Child () {}Child.prototype = new Parent();Child.p...原创 2018-12-13 22:22:12 · 698 阅读 · 0 评论 -
深入JavaScript 模拟实现new
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。例1function Person(name, age) { this.name = name; this.age = age;}var child = new Person('sam', 18);new Person() 过程种发生了什么:(1)创建了一个新对象(2)这个新对象 的_...原创 2018-12-21 22:44:16 · 374 阅读 · 0 评论 -
深入JavaScript 模拟实现bind
bindbind() 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。由此我们可以首先得出 bind 函数的两个特点:返回一个函数可以传入参数例1var foo = { value: 1};function bar() { console.log(this.value...原创 2018-12-21 17:30:09 · 232 阅读 · 0 评论 -
深入JavaScript 模拟实现call、apply
一、call()call() :在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。1、实际的call()var value = 2;var foo = { value: 1 };function bar(name, age) { console.log(this.value); console.log(name, age);}bar.call(foo...原创 2018-12-14 21:47:29 · 599 阅读 · 0 评论 -
深入JavaScript 从原型到原型链
一、构造函数、原型对象、实例对象的关系function Foo(){} //Foo为构造函数Foo.prototype.name = 'Feidian'; //Foo.prototype即原型对象var f1 = new Foo() //f1 为 实例对象要想了解Foo、Foo.prototype、f1 之间的关系,我们就要理解prototype...原创 2018-12-11 21:09:56 · 617 阅读 · 0 评论 -
深入JavaScript 赋值后的内存分布
在阅读前,请先读下面这篇链接文章里的《二、从底层角度讲》,它能让你对JS参数传递的具体机理有一定了解。其实两者差别不大。深入JavaScript之参数共享传递现在开始进入正题关键点:运算符=就是创建或修改变量在内存中的指向.初始化变量时为创建,重新赋值即为修改.一、例1var a = {b: 1}; // a = {b: 1}var c = a; /...原创 2018-11-20 16:39:20 · 866 阅读 · 1 评论 -
深入JavaScript 共享传递
在《JavaScript高级程序设计》第三版,讲到传递参数:ECMAScript中所有函数的参数都是按值传递的。什么是按值传递呢?也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。如果你没有学过C/C++/C#等编程语言,对堆栈以及汇编并不是很了解,那么阅读《一、从小白角度讲》;反之,请看《二、从底层角度讲》一、从小白角度讲这种讲解方式是...原创 2018-11-20 10:28:40 · 1308 阅读 · 4 评论 -
深入JavaScript 闭包
ECMAScript中,闭包指的是:从理论角度:所有的函数。因为它们都在创建的时候就将上层上下文的数据保存起来了。哪怕是简单的全局变量也是如此,因为函数中访问全局变量就相当于是在访问自由变量,这个时候使用最外层的作用域。从实践角度:以下函数才算是闭包:即使创建它的上下文已经销毁,它仍然存在(比如,内部函数从父函数中返回)在代码中引用了自由变量上面看不懂不要紧,往下看~一、理...原创 2018-11-18 04:22:04 · 557 阅读 · 0 评论 -
深入JavaScript 执行上下文(五):整个过程
执行上下文现在加上this,再把过一遍整过过程。以下面例子为例:var scope = "global scope";function checkscope(){ var scope = "local scope"; function f(){ return scope; }原创 2018-11-10 20:50:46 · 738 阅读 · 0 评论 -
深入JavaScript 执行上下文(四):作用域链
深入JavaScript 执行上下文(一):作用域深入JavaScript 执行上下文(二):执行上下文栈深入JavaScript 执行上下文(三):变量对象作用域链当要查找某变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就...原创 2018-11-10 20:20:38 · 1005 阅读 · 0 评论 -
深入JavaScript 执行上下文(三):变量对象
深入JavaScript 执行上下文(一):作用域深入JavaScript 执行上下文(二):执行上下文栈变量对象变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的变量和函数声明。因为不同执行上下文下的变量对象稍有不同,所以我们来聊聊全局上下文下的变量对象和函数上下文下的变量对象。变量对象 / 活动对象:每个执行环境都有一个变量对象,环境中定义的所有变量和函数都保存在这个...原创 2018-11-12 20:41:25 · 486 阅读 · 0 评论 -
深入JavaScript 执行上下文(二):执行上下文栈
执行上下文栈(环境栈)1、可执行代码这就要说到 JavaScript 的可执行代码的类型有哪些了?其实很简单,就三种,全局代码、函数代码、eval代码。举个例子,当执行到一个函数的时候,就会进行准备工作,这里的“准备工作”,让我们用个更专业一点的说法,就叫做"执行上下文(execution context)"。2、执行上下文栈(环境栈)接下来问题来了,我们写的函数多原创 2018-11-10 19:47:20 · 654 阅读 · 0 评论 -
深入JavaScript 执行上下文(一):作用域
作用域作用域是指程序源代码中定义变量的区域。作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。下面我们来看看作用域的两种解析方式。作用域两种解析方式:静态作用域:js使用动态作用域:java、c++等使用1、静态作用域:JavaScript 采用就是词法作用域(lexical scoping),也就是静态作用域。使用词法环境来管理。 一段代码执行前,先初始化词...原创 2018-11-10 19:23:47 · 538 阅读 · 0 评论