ECMA-262-3 详解 第八章 求值策略

此文译自 Dmitry A. SoshnikovECMA-262-3 in detail. Chapter 8. Evaluation strategy.

概述

本文将讨论在 ECMAScript 中向函数传递参数的策略。

计算机科学里对这种策略一般称为“evaluation strategy”,即在编程语言中求解或计算某些表达式的值的一系列规则。将参数传递给函数是其中的一个案例。

写这篇文章的原因是因为论坛上有一些类似的讨论,大家都呼吁给出 ECMAScript 中参数传递策略的最精确的说明。本文给出了相应的定义,希望对大家有所帮助。

很多程序员都确信在 JavaScript 中(甚至其它一些语言),对象是按引用传参,而原始值类型按值传参,此外,很多文章和书籍都说到这个“事实”,但有多人真正理解这个术语,而且又有多少是正确的?我们本篇讲逐一讲解。

ECMA-262-3 详解 第七章 面向对象(二):ECMAScript 实现

此文译自 Dmitry A. SoshnikovECMA-262-3 in detail. Chapter 7.2. OOP: ECMAScript implementation.

概述

这一章的第二部分是关于 EMCAScript 中的面向对象编程。在第一部分中我们讨论了 OOP 的基本理论并勾画出和 ECMAScript 的相似之处。在阅读第二部分之前,如果有必要,我还是建议首先阅读这一章的第一部分 概论,因为后面将会用到其中的一些术语。

ECMA-262-3 详解 第七章 面向对象(一):概论

此文译自 Dmitry A. SoshnikovECMA-262-3 in detail. Chapter 7.1. OOP: The general theory.

概述

本文主要讨论 ECMAScript 中面向对象编程。之前已经有大量的文章讨论过该话题了,但本文与那些文章不同,本文主要从理论方面来解析其内部原理。重点讨论对象创建算法,对象之间的关系(包含最基本的关系 – 继承)是如何形成的,并给出了明确的定义(我希望这可以消除一些文章中对于 JavaScript 中 OOP 的疑虑和混乱)。

ECMA-262-3 详解 第六章 闭包

本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 6. Closures.

其中大部分参考了 goddyzhao翻译

概述

本文将介绍在 JavaScript 中大家经常讨论的话题 – 闭包(Closure)。事实上,闭包是个老生常谈的话题了,管如此,这里还是要试着从理论角度来讨论下闭包,看看 ECMAScript 中的闭包内部究竟是如何工作的。

正如在此前文章中提到的,这些文章都是系列文章,相互之间都是有关联的。因此,为了更好的理解本文要介绍的内容, 建议先去阅读下第四章 作用域链第二章 变量对象

ECMA-262-3 详解 第五章 函数

本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 5. Functions.

其中大部分参考了 goddyzhao翻译

概述

本文将介绍 ECMAScript 中一个非常常见的对象 – 函数。我们将着重介绍函数都有哪些类型,不同类型的函数是如何影响上下文的变量对象的,以及每种类型的函数的作用域链中都包含什么,并回答诸如下面这样的问题:下面声明的函数有什么区别吗?(如果有,区别是什么)。

1
2
3
var foo = function () {
...
};

上述方式创建的函数和如下方式创建的有什么不同?

1
2
3
function foo() {
...
}

下面代码为什么要用一个括号包起来呢?

1
2
3
(function () {
...
})();

本文和此前几篇文章都是有关联的,因此,要想完全搞懂这部分内容,建议先去阅读第二章 变量对象以及第四章 作用域链

下面,我们首先来看一下函数类型。

ECMA-262-3 详解 第四章 作用域链

本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 4. Scope chain.

概述

通过第二章 变量对象的学习我们知道,执行上下文的数据(变量、函数声明、函数形参)都是以属性的方式储存在变量对象中。

我们还知道,变量对象是在进入执行上下文阶段被创建和初始化,随后在执行代码阶段会对属性值进行更新。

本文将深入讨论与执行上下文密切相关的另外一个重要的概念 —— 作用域链(Scope Chain)。

ECMA-262-3 详解 第三章 This

本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 3. This.

翻译过程参考了现有的中文翻译,学习 ECMAScript 是一个非常抽象的过程,因为很多概念都是通过抽象的方式来解释的,作者尝试尽量用一些简单的方式并使用了一些具体图表,来使我们的学习曲线稍微平稳一点。

概述

本文将讨论和执行上下文密切相关的更多细节 - this 关键字。

实践证明,这个主题很难,在不同的执行上下文中确定 this 的值经常会发生问题。

许多程序员习惯性地讲 this 和面向对象编程密切联系在一起,this 指向了构造函数中新创建的对象。在 ECMAScript 中,这样说也没问题,但就像我们即将看到的那样,this 不限于用来指向新创建的对象。

接下来给大家揭开在 ECMAScript 中 this 神秘的面纱。

ECMA-262-3 详解 第二章 变量对象

本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 2. Variable object.

参考了一些译文,作为自己学习 ECMAScript 的一点积累。

概要

创建应用程序的时,总免不了要声明变量和函数。然而,解析器(interpreter)是如何以及从哪里找到这些数据(变量,函数)的,当我们引用一个变量时,在解析器内部又发生了什么?

许多 ECMAScript 程序员都知道变量与执行上下文密切相关:

1
2
3
4
5
6
7
8
var a = 10; // 全局上下文中的变量
(function () {
var b = 20; // 函数上下文中的局部变量
})();
alert(a); // 10
alert(b); // "b" is not defined

同样,许多 ECMAScript 程序员也知道,基于当前版本的规范,独立作用域只能通过“函数代码”才能创建。也就是说,与 C/C++ 不同,在 ECMAScript 中 for 循环不会创建一个局部上下文(即局部作用域)。

1
2
3
4
5
for (var k in {a: 1, b: 2}) {
alert(k);
}
alert(k); // 尽管循环已经结束,但是变量 “k” 仍然在作用域中

下面具体来看一下,当我们声明变量和函数时,究竟发生了什么。

ECMA-262-3 详解 第一章 执行上下文

本文译自 Dmitry A. SoshnikovECMA-262-3 in detail. Chapter 1. Execution Contexts.

参阅了已有的中文翻译,以此来加深对 ECMAScript 的理解。

概要

本文将介绍 ECMAScript 的执行上下文以及与之相关的可执行代码的类型。

定义

每当控制器到达 ECMAScript 的可执行代码时,控制器就进入了一个执行上下文。

执行上下文(简称 - EC)是 ECMA-262 中的一个抽象概念,用于区别不同类型的可执行代码。

规范中并没有从技术角度来定义执行上下文的具体结构和类型,这是实现标准 ECMAScript 引擎所需要考虑的问题。

一系列活动执行上下文在逻辑上形成一个栈。栈底永远是全局上下文,而栈顶是当前(活动)执行上下文。栈在进入或退出各种执行上下文(EC)时被修改(入栈/出栈)。

go2top