前端基础进阶(十一):详解面向对象、构造函数、原型与原型链
对象的定义在ECMAScript-262中,对象被定义为“ 无序属性的集合,其属性可以包含基本值,对象或者函数 ”。
也就是说,在JavaScript中,对象无非就是由一些列无序的key-value对组成。其中value可以是基本值,对象或者函数。
// 这里的person就是一个对象var person = { name: 'Tom', age: 18, getName: fu ...
前端基础进阶(十):深入详解函数的柯里化
柯里化是函数的一个高级应用,通过上一个章节的学习我们知道,接收函数作为参数的函数,都可以叫做高阶函数。这一章我们要学习的柯里化,其实就是高阶函数的一种特殊用法。
柯里化是指这样一个函数(假设叫做createCurry),他接收函数A作为参数,运行后能够返回一个新的函数。并且这个新的函数能够处理函数A的剩余参数。
这样的定义可能不太好理解,我们可以通过下面的例子配合解释。
有一个接收三个参数的函 ...
前端基础进阶(九):函数与函数式编程
函数声明、函数表达式、匿名函数与自执行函数函数声明JavaScript中,有两种声明方式,一个是使用var/let/const的变量声明,另一个是使用function的函数声明。
在 前端基础进阶(三):变量对象详解 一文中有提到过,变量对象的创建过程中,函数声明比变量声明具有更为优先的执行顺序,即常常提到的函数声明提前。因此在执行上下文中,无论在什么位置声明了函数,都可以在同一个执行上下文中直接 ...
前端基础进阶(八):在Chrome开发者工具中观察函数调用栈、作用域链与闭包
前端开发中,有一个重要的技能,叫做 断点调试 。
利用chrome开发者工具中的断点调试,能够一步步观察JavaScript的执行过程,直观感知函数调用栈、作用域链、变量对象、闭包、this等关键信息的变化。因此,断点调试对于快速定位代码错误,以及快速了解代码的执行过程有着非常重要的作用,这也是前端开发必不可少的一个高级技能。
这篇文章的另一个目的在于借助对于断点调试的学习,进一步加深对闭包的理解 ...
前端基础进阶(七):全方位解读This
在这之前,先回顾一下执行上下文的生命周期。
执行上下文生命周期
执行上下文的创建阶段,会分别生成变量对象,建立作用域链,确定this指向。本文的关键,就是确定this指向。this的指向,是在函数被调用的时候确定的。也就是执行上下文被创建时确定的 。
一个函数中的this指向,可以非常灵活。比如下面的例子中,同一个函数由于调用方式的不同,this指向了不一样的对象。
var a = 10;var ...
前端基础进阶(六):setTimeout与循环闭包面试题详解
在上文 前端基础进阶(五):闭包 中的结尾留下了一个关于setTimeout与循环闭包的思考题。
利用闭包,修改下面的代码,让循环输出的结果依次为1, 2, 3, 4, 5
for (var i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i); }, i * 1000);}
setTimeout ...
前端基础进阶(五):闭包
闭包闭包是一种特殊的对象。它由两部分组成。执行上下文(代号A),以及在该执行上下文中创建的函数(代号B)。
当B执行时,如果访问了A中变量对象中的值,那么闭包就会产生。
在大多数理解中,包括许多著名的书籍,文章里都以函数B的名字代指这里生成的闭包。而在chrome中,则以执行上下文A的函数名代指闭包 。
一个闭包对象,由A、B共同组成,在以后的篇幅中,我将以chrome的标准来称呼。
...
前端基础进阶(四):作用域与作用域链
词法环境(Lexical Environments)官方规范对词法环境的说明是:词法环境(Lexical Environments)是 一种规范类型,用于根据ECMAScript代码的词法嵌套结构来定义标识符与特定变量和函数的关联 。
通俗来说,词法环境就是一套约定好的规则。我们写代码,应该按照这个规则来。JS引擎对JS源码进行词法分析,也是按照这个规则。
词法环境,其实就是作用域。
得出结论 ...
前端基础进阶(三):变量对象详解
变量对象,新版本中,准确的说法应该是环境记录对象。而环境记录对象,又区分词法环境对象与变量环境对象,词法环境对象用于解析当前上下文中,由 const 声明的标识符引用,变量环境对象,用于解析由 var 声明的标识符引用。执行上下文内部的实现逻辑过于复杂,并不利于理解,因此此处为了理解方便,仍然统一采用变量对象的说法.
在JavaScript中,肯定不可避免的需要声明变量和函数,JS编译器是如何 ...
前端基础进阶(二):执行上下文详细图解
先引入一个JavaScript中最基础,但同时也是最重要的概念: 执行上下文(Execution Context)。
每次当控制器转到可执行代码的时候,就会进入一个执行上下文 。执行上下文可以理解为当前代码的执行环境,它会形成一个作用域。
JavaScript中的运行环境大概包括三种情况:
全局环境:JavaScript代码运行起来会首先进入该环境
函数环境:当函数被调用执行时,会进入当前函数中 ...