摘要:
《parctical common lisp》的作者曾说,如果你需要一种模式,那一定是哪里出了问题。他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案。不管是弱类型或强类型,静态或动态语言,命令式或说明式语言、每种语言都有天生的优缺点。一个牙买加运动员, 在短跑甚至拳击方面有一些优势,在练瑜伽上就欠缺一些。术士和暗影牧师很容易成为一个出色的辅助,而一个背着梅肯满地图飞的敌法就会略显尴尬。 换到程序中, 静态语言里可能需要花很多功夫来实现装饰者,而js由于能随时往对象上面扔方法,以至于装饰者模式在js里成了鸡肋。讲javascript设计模式的书还比较少. Pro java 阅读全文
摘要:
/*一、变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。*/ var n=999; function f1(){ alert(n); } f1(); // 999//另一方面,在函数外部自然无法读取函数内的局部变量。 function f1(){ var n=999; } alert(n); // error//这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! ... 阅读全文
摘要:
//反科里化Function.prototype.uncurrying = function() { var _this = this; return function() { return Function.prototype.call.apply(_this, arguments); //_this.call(arguments); //在下面的例子中Array.prototype.push == _this //因为call 本身也是个函数 //Function.prototype.call.apply 就是去调用call()方法 //也就是Array.prototype.... 阅读全文