javascript设计模式与开发实践--学习笔记一

开始学习《javascript设计模式与开发实践》这本书。随便记一些读书笔记。

<html>
<head>
</head>
<body>
<script>
/* js里常常会对arguments做处理。函数的参数列表arguments是一个类数组对象,虽然也有下标,但是并非真正的数组,所以不能调用sort,或push等方法。可以借用 Array.prototype.push!!
要将arguments转成真正的数组时,还可以借用 Array.prototype.slice()方法。
//eg:往arguments动态添加数据。

<div style="font-family: Arial; font-size: 14px; line-height: 23.8px;">(function(){</div><div style="font-family: Arial; font-size: 14px; line-height: 23.8px;"><span style="white-space: pre;"></span><span style="white-space:pre">	</span>Array.prototype.push.call(arguments,3);</div><div style="font-family: Arial; font-size: 14px; line-height: 23.8px;"><span style="white-space: pre;"></span><span style="white-space:pre">	</span>console.log(arguments);</div><div style="font-family: Arial; font-size: 14px; line-height: 23.8px;">}(1,2));</div>


// 判断某个对象是否是string类型
Object.prototype.toString.call("str") === '[bject '+String+']';
*/

/*闭包:闭包的形成与变量的作用域和变量的生存周期密切相关。
函数用来创建函数作用域。函数里面可以看到外面的变量,但是函数外面无法看到函数内部的变量。变量搜索过程由内到外。
用闭包封装变量
var multi = (function(){
var cache = {};
var arg = Array.prototype.join.call(arguments,",");
if(cache[arg])
return cache[arg];
cache[arg] = 1;
for(var i = 0, n = arguments.length; i < n ; i++){
cache[arg] *= arguments[i];
}
return  cache[arg];
});
console.log(multi(1,2,3));
*/
高阶函数:函数作为参数传递或函数作为返回值输出.
js里处处可见高阶函数。
作为参数传递:1、回调函数
var getUserInfo = function(userId,callback){
$.ajax('http://xxx.com/getUserInfo?'+userId,function(data){
if(typeof callback === 'function'){
callback(data);
}
});
};
getUserInfo(13567,function(data){
alert(data.userName);
});
//将请求封装成函数,委托给另一个函数执行
var appendDiv = function(callback){
for(var i = 0 ; i < 100 ; i++){
var div = document.createElement('div');
div.innerHTML = i;
document.body.appendChild(div);
if(typeof callback === 'function'){
callback(div);
}
}
};
appendDiv(function(node){
node.style.display = 'none';
});
/*
代码重构--> 很重要一种技巧:提炼函数。一个大函数中有一些代码块可以独立出来,则封装在小函数里。独立出的小函数有助于代码复用。如果小函数不在代码其他地方使用,则最好将他们用闭包封闭起来。
var multi = (funtion(){
var cache = {};
var calculate = function(){
var a = 1;
for(var i = 0, n = arguments.length ; i < n ; i++){
a *= arguments[i];
}
return a;
};
return function(){
var args = Array.prototype.join.call(arguments,",");
if(args in cache)
return cache[args];
return calculate(arguments);
}
}());
console.log(multi(1,2,3));*/
</script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值