一般情况下,我们会使用try..catch..来进行异常处理,例如:
```javascript
function sync() {
throw new Error('sync error');
}
try {
sync();
} catch (err) {
console.log('error caught:', err.message);
}
继续阅读 »
定义:定义一系列算法,把他们一个个封装起来,并且使他们可以相互替换。
需求:绩效为S的人年终奖有4倍工资,绩效为A的人年终奖有3倍工资,绩效为B的人年终奖有2倍工资。
var calculateBonus = function(performanceLevel, salary) {
if (performanceLevel === 'S') {
return salary * 4;
}
if (performanceLevel === 'A') {
return salary * 3;
}
if (performanceLevel === 'B') {
继续阅读 »
迭代器模式是指提供一种方法,顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心内部构造,也可以按顺序访问其中的每个元素。
jQuery中的迭代器
迭代器模式无非就是循环访问聚合对象中的各个元素。比如jQuery中的$.each函数,其中回调函数中的i为当前 索引,n为当前元素,代码如下
$.each([1, 2, 3], function(i, n) {
console.log('当前坐标:' + i);
console.log('当前值:' + n);
});
然而,作为一个合格的前端开发者,我们不应该只是会用,而
继续阅读 »
Hash
哈希函数(散列函数)主要用于生成消息摘要(Message Digest),即将任意大小的数据映射到一个固定大小的数据。最常见的如MD5,SHA1等。
```
--------- hash function --------------
| input |---------------->| hash value |
```
在Node中,通过crypto.getHashes()可以查看所支持的哈希算法:
js
crypto.getHashes()
// => [ 'DSA', 'DSA-SHA', 'DSA-SHA1', ... ]
下面是一个MD5的例子:
```js
var hash = crypt
继续阅读 »
In data-driven statistical computing and data analysis, applying a chain of commands step by step is a common situation. However, it is neither straightforward nor flexible to write a group of deeply nested functions. It is because the function that comes later must be written first.
继续阅读 »
Node.js中exports和module.exports有什么不同?
你肯定对Node.js模块中用来创建函数的exports对象很熟悉(假设一个名为rocker.js的文件):
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
继续阅读 »
在学习排序算法的时候,经常要用到随机数组,于是就写了一个生成随机数组的方法。算法来自网络,只是修改成了 JavaScript 版本。
基本原理是洗牌算法,首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。这样能确保每个元素在每个位置的概率都是1/n。
具体代码如下:
javascript
/**
*
* 生成从 1 到 length 之间的随机数组
*
* @length 随机数组的长度,如果未传递该参数,那么 length 为默认值 9
*
*/
function randomArray(length) {
var i,
inde
继续阅读 »
全屏API可以控制浏览器的全屏显示,让一个Element节点(以及子节点)占满用户的整个屏幕。目前各大浏览器的最新版本都支持这个API(包括IE11),但是使用的时候需要加上浏览器前缀。
more
方法
requestFullscreen()
Element节点的requestFullscreen方法,可以使得这个节点全屏。
```javascript
function launchFullscreen(element) {
if(element.requestFullscreen) {
element.requestFullscreen();
} else if(element.mozRequestFull
继续阅读 »
事件
在d3入门系列文章中我们介绍过d3选择器,其中有提到选择器为交互添加或移除事件监听器的方法selection.on,除了选择器事件外,D3还提供了很多种事件机制,本节我们详细介绍下d3的事件机制
选择器事件
添加事件监听
跟jQuery类似的方法监听事件,传递参数为当前数据d和索引i;
如果所选择的元素相同类型的一个事件监听已经注册了,新的监听替换老的;
selection.on('click',function(d,i){
….
});
为相同事件类型注册多个监听器,该类型可以跟一个可选的命名空间,如“click.foo”和“click.bar”。
selection.on('click.foo',fu
继续阅读 »
本文译自 Dmitry A. Soshnikov 的文章 ECMA-262-3 in detail. Chapter 2. Variable object.
参考了一些译文,作为自己学习 ECMAScript 的一点积累。
概要
创建应用程序的时,总免不了要声明变量和函数。然而,解析器(interpreter)是如何以及从哪里找到这些数据(变量,函数)的,当我们引用一个变量时,在解析器内部又发生了什么?
许多 ECMAScript 程序员都知道变量与执行上下文密切相关:
```js
var a = 10; // 全局上下文中的变量
(function () {
var b = 20; // 函数上下文中的局部变量
}
继续阅读 »