Skip to content

Instantly share code, notes, and snippets.

@silianlinyi
silianlinyi / hasStrictMode.js
Last active December 24, 2015 11:49
在严格模式中,调用的函数(不是方法)中的一个this值是undefined。(在非严格模式中,调用的函数中的this值总是全局对象)。可以利用这种特性来 判断JavaScript实现是否支持严格模式。
var hasStrictMode = (function() {
"use strict";
return this === undefined;
}());
@silianlinyi
silianlinyi / prototype.js
Last active December 28, 2015 22:59
推荐的原型继承方式
/**
* Person类(父类)
*/
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.getName = function() {
return this.name;
@silianlinyi
silianlinyi / walkTheDOM.js
Created November 21, 2013 13:01
定义一个walkTheDOM函数,它从某个指定的节点开始,按HTML源码中的顺序访问该树的每个节点。它会调用一个函数,并依次传递每个节点给它。walkTheDOM调用自身去处理每一个子节点。
var walkTheDOM = function walk(node, func) {
func(node);
node = node.firstChild;
while(node) {
walk(node, func);
node = node.nextSibling;
}
}
@silianlinyi
silianlinyi / getElementsByAttribute.js
Created November 21, 2013 13:17
定义getElementsByAttribute函数。它以一个属性名称字符串和一个可选的匹配值作为参数。
function getElementsByAttribute(att, value) {
var results = [];
iterateDOM(document.body, function(node) {
var actual = node.nodeType === 1 && node.getAttribute(att);
if(typeof actual === 'string' && (actual === value || typeof value !== 'string')) {
results.push(node);
}
});
@silianlinyi
silianlinyi / factorial.js
Created November 21, 2013 13:35
构建一个带尾递归的函数。因为它会返回自身调用的结果,所以它是尾递归。
function factorial(i, a) {
a = a || 1;
if(i < 2) {
return a;
}
return factorial(i - 1, a * i);
}
factorial(4); // => 24
@silianlinyi
silianlinyi / fibonacci.js
Created November 26, 2013 09:44
斐波那契数列函数的实现
var fibonacci = function() {
var memo = [0, 1];
var fib = function(n) {
var result = memo[n];
if(typeof result !== 'number') {
result = fib(n - 1) + fib(n - 2);
memo[n] = result;
}
return result;
};
@silianlinyi
silianlinyi / gist:7655948
Created November 26, 2013 09:59
在计算机领域,记忆(memoization)是主要用于加速程序计算的一种优化技术,它使得函数避免重复演算之前已被处理的输入,而返回已缓存的结果。我们可以把这种技术推而广之,编写一个函数来帮助我们构造带记忆功能的函数。memoizer函数取得一个初始的memo数组和formula函数。它返回一个管理memo存储和在需要时调用formula函数的recur函数。我们把这个recur函数和他的参数传递给formula函数:
var memoizer = function(memo, formula) {
var recur = function(n) {
var result = memo[n];
if(typeof result !== 'number') {
result = formula(recur, n);
memo[n] = result;
}
return result;
};
return recur;
@silianlinyi
silianlinyi / spirograph.html
Created December 26, 2013 10:04
利用translate方法进行绘制螺旋图案的例子
<canvas width="300" height="300" id="test"></canvas>
<script type="text/javascript">
var canvas = document.getElementById('test');
var ctx = canvas.getContext('2d');
//绘制螺旋图案的函数
function drawSpirograph(ctx,R,r,O){
var x1 = R-O;
var y1 = 0;
var i = 1;
@silianlinyi
silianlinyi / random.js
Created January 6, 2014 07:49
Returns a random integer between min and max, inclusive. If you only pass one argument, it will return a number between 0 and that number.
function ramdom(min, max) {
if (max == null) {
max = min;
min = 0;
}
return min + Math.floor(Math.random() * (max - min + 1));
}
@silianlinyi
silianlinyi / generateRandomAlphaNum.js
Created January 6, 2014 07:58
生成一组随机的字母数字字符
function generateRandomAlphaNum(len) {
var rdmString = "";
for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));
return rdmString.substr(0, len);
}