本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 2. Variable object.
参考了一些译文,作为自己学习 ECMAScript 的一点积累。
概要
创建应用程序的时,总免不了要声明变量和函数。然而,解析器(interpreter)是如何以及从哪里找到这些数据(变量,函数)的,当我们引用一个变量时,在解析器内部又发生了什么?
许多 ECMAScript 程序员都知道变量与执行上下文密切相关:
```js
var a = 10; // 全局上下文中的变量
(function () {
var b = 20; // 函数上下文中的局部变量
}
继续阅读 »
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 5. Functions.
其中大部分参考了 goddyzhao 的翻译。
概述
本文将介绍 ECMAScript 中一个非常常见的对象 -- 函数。我们将着重介绍函数都有哪些类型,不同类型的函数是如何影响上下文的变量对象的,以及每种类型的函数的作用域链中都包含什么,并回答诸如下面这样的问题:下面声明的函数有什么区别吗?(如果有,区别是什么)。
js
var foo = function () {
...
};
上述方式创建的函数和如下方式创建的有什么不同?
js
function foo() {
继续阅读 »
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 4. Scope chain.
概述
通过第二章 变量对象的学习我们知道,执行上下文的数据(变量、函数声明、函数形参)都是以属性的方式储存在变量对象中。
我们还知道,变量对象是在进入执行上下文阶段被创建和初始化,随后在执行代码阶段会对属性值进行更新。
本文将深入讨论与执行上下文密切相关的另外一个重要的概念 —— 作用域链(Scope Chain)。
more
定义
如果简单扼要地讲,那么作用域链就是与内部函数息息相关的一个概念。
众所周知,ECMAScript 允许创建内部函数,甚至可以将这些内部函数作
继续阅读 »
此文译自 Dmitry A. Soshnikov 的 ECMA-262-3 in detail. Chapter 7.1. OOP: The general theory.
概述
本文主要讨论 ECMAScript 中面向对象编程。之前已经有大量的文章讨论过该话题了,但本文与那些文章不同,本文主要从理论方面来解析其内部原理。重点讨论对象创建算法,对象之间的关系(包含最基本的关系 -- 继承)是如何形成的,并给出了明确的定义(我希望这可以消除一些文章中对于 JavaScript 中 OOP 的疑虑和混乱)。
more
概论、范式和思想
在开始讨论之前,有必要掌握一些 OOP 的基本特征,并弄清楚一些基本概念。
ECMAScr
继续阅读 »
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 6. Closures.
其中大部分参考了 goddyzhao 的翻译。
概述
本文将介绍在 JavaScript 中大家经常讨论的话题 -- 闭包(Closure)。事实上,闭包是个老生常谈的话题了,管如此,这里还是要试着从理论角度来讨论下闭包,看看 ECMAScript 中的闭包内部究竟是如何工作的。
正如在此前文章中提到的,这些文章都是系列文章,相互之间都是有关联的。因此,为了更好的理解本文要介绍的内容, 建议先去阅读下第四章 作用域链和第二章 变量对象。
more
概论
在开始讨论 ECMAScr
继续阅读 »
概述
除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。
设立"严格模式"的目的,主要有以下几个:
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的Javascript做好铺垫。
"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。
另一方面,同样的代码,在"严格模式"中,可能会有不一样的运
继续阅读 »
Airbnb 的 ES5 规范写的非常好,现在添加了 ES6 的部分。
另外阮一峰老师的 ECMAScript 6 入门值得参考。
more
类型
原始类型:值传递
string
number
boolean
null
undefined
```js
const foo = 1;
let bar = foo;
bar = 9;
console.log(foo, bar); // => 1, 9
```
复杂类型:引用传递
object
array
function
```js
const foo = [1, 2];
const bar = foo;
bar[0] = 9;
console.log
继续阅读 »