首页

JavaScript arguments 对象详解

蓝蓝

1. 什么是 arguments

MDN 上解释:

arguments 是一个类数组对象。代表传给一个function的参数列表。

我们先用一个例子直观了解下 JavaScript 中的 arguments 长什么样子。

function printArgs() { console.log(arguments);
}

printArgs("A", "a", 0, { foo: "Hello, arguments" });

执行结果是:

选择 Reac​​tJS 的五大理由

蓝蓝

ReactJS是一个开源的JavaScript库,并且由Facebook和Instagram这样的顶尖IT企业以及开发者社区所维护。该框架广泛使用于为web应用程序开发用户界面的时候。这个特殊的框架被发明时带有这样一个目的:

“构建数据随着时间的推移一次又一次改变的大型应用程序。”

我们经常使用的工具有很多,但只有少数彻底改变了我们的工作流程。ReactJS就是其中之一。随着现在可用框架变得越来越多,我们很难找到一个最终不会穷途末路的框架。这就是为什么在ValueCoders我们建议去往React。

01.png

JavaScript 闭包的底层运行机制

蓝蓝

当JavaScript在运行的时候,它需要一些空间让它来存储本地变量(local variables)。我们将这些空间称为作用域对象(Scope object),有时候也称作LexicalEnvironment。例如,当你调用函数时,函数定义了一些本地变量,这些变量就被存储在一个作用域对象中。你可以将作用域函数想象成一个普通的JavaScript对象,但是有一个很大的区别就是你不能够直接在JavaScript当中直接获取这个对象。你只可以修改这个对象的属性,但是你不能够获取这个对象的引用。

作用域对象的概念使得JavaScript和C、C++非常不同。在C、C++中,本地变量被保存在栈(stack)中。在JavaScript中,作用域对象是在堆中被创建的(至少表现出来的行为是这样的),所以在函数返回后它们也还是能够被访问到而不被销毁。

JavaScript 中匿名函数的递归调用

蓝蓝

不管是什么编程语言,相信稍微写过几行代码的同学,对递归都不会陌生。 以一个简单的阶乘计算为例:

function factorial(n) { if (n <= 1) { return 1;
    } else { return n * factorial(n-1);
    }
}

我们可以看出,递归就是在函数内部调用对自身的调用。 那么问题来了,我们知道在Javascript中,有一类函数叫做匿名函数,没有名称,怎么调用呢?当然你可以说,可以把匿名函数赋值给一个常量:

const factorial = function(n){ if (n <= 1) { return 1;
    } else { return n * factorial(n-1);
    }
}

JavaScript 事件对内存和性能的影响

蓝蓝

虽说事件处理程序可以为现代 Web 页面添加很强的交互能力,但是不分青红皂白就添加大量的事件处理程序绝对是一种愚蠢的行为。

我们来分析一下:事件处理程序本质上是一种函数,是一种对象,存放在内存中,设置大量的事件处理程序会使内存中的对象变多,Web 程序的性能会变得越来越差,用户体验很不好。

为了更好地利用好事件处理程序,便出现了事件委托,用来提升性能。

JavaScript 中的面向对象编程

蓝蓝

JavaScript 是一个强大的面向对象编程语言,但是,并不像传统的编程语言,它采用一个以原型为基础的OOP模型,致使它的语法让大多数开发人员看不懂。另外,JavaScript 也把函数作为首要的对象,这可能会给不够熟悉这门语言的开发人员造成更大的困惑。那就是我们决定放在前面作为一个简短前言进行介绍的原因,并且在 JavaScript 里也可以用作面向对象编程的一个参考。

这个文档没有提供一个面向对象编程的规则预览,但有它们的接口概述。

那些帮助你成为优秀前端工程师的讲座——《JavaScript篇》

蓝蓝

《重新思考应用的架构》

Re-Imagining the Browser With AngularJS , Igor Minar

Igor Minar 和大家分享先进的前端开发框架——AngularJS。

 

《项目的国际化问题》

Entschuldigen you, parlez vouz JavaScript , Sebastian Golasch (Video )

Sebastian Golasch 向大家介绍如何处理 JavaScript 项目中的国际化问题。

Screenshot

日历

链接

blogger

蓝蓝 http://www.lanlanwork.com

存档