汉诺塔算法:
var hano=function(disc,src,aux,dst){
if(disc>0){
hano(disc-1,src,aux,dst);
console.log('move disc:'+disc+'from'+src+'to'+dst);
hano(disc-1,aux,src,dst);
}
}
当把目标disc从原始柱子移到目标柱子上后,目标disc上面的disc一定是在辅助柱子aux上的,所以要做一次 hano(disc-1,aux,src,dst);操作,此时对disc-1来说,目标柱子不变,但辅助柱子变成了src,原始柱子变成了aux。
JavaScript没有提供尾递归优化,深度递归的函数可能会因为堆栈浅溢出而运行失败。
JavaScript不支持块级作用域(尽管看起来是支持的),拥有函数作用域:函数内部定义的变量外部不可见,内部处处可见。应在JavaScript函数体的顶部声明所有将要使用的变量。
块级作用域:代码块中定义的所有变量块外不可见,变量在代码块运行结束后自行释放。
闭包:JavaScript的函数作用域特性使得函数内部定义的变量外部不可访问,但内部可访问。如此,我们利用该特性通过构建函数闭包来实现私有化封装。创建对象时将不再返回新对象的this指针,而是返回一个对象字面量return{};而函数作用域决定了构造函数执行后该字面量内的方法继续享有访问构造函数内部变量的权限(内部函数拥有比它外部函数更长的生命周期)。
var myObject=(function(){
var value=0;
return {
incream:function(inc){
value+=typeof inc==='number'?inc:1;
},
getValue:function(){
return value;
}
};
}());
myObject.incream(2);
var va=myObject.getValue();
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
var quer=function(status){
return{
get_status:function(){ //get_status访问的不是status的副本,而是status本身。
return status;
}
};
};
var myQer=quer("amazed");
模块模式的一般形式:一个定义了私有变量的函数的函数;利用闭包创建可以方位私有变量和函数的特权函数;最后饭后这个特权函数,或者把他保存到一个可以访问到的地方。(以此方法可以摒弃全局变量的使用)
级联:函数返回对象this指针,级联调用
不要用构造器来创建所谓的JavaScript类 乱七八糟的!
调用时候忘了加new还会讲this绑定到全局变量环境!!
所有构造器函数都约定命名成首字母大写的形式,并且不以首字母大写的形式拼写任何其他的东西。因为当构造器函数调用时忘记了加new,编译和运行是都不会有警告。这是语言设计的错误。