函数
2016-11-14 10:32:23 0 举报
AI智能生成
函数
作者其他创作
大纲/内容
函数对象
对象字面量产生的对象连接到Object.prototype
函数对象连接到Function.prototye
函数是对象。
函数字面量
var add = function(a,b){
return a + b;
}
return a + b;
}
闭包,通过函数字面量创建的函数对象包含一个连到外部上下文的连接
调用
调用模式
方法调用模式
函数调用模式
构造器调用模式
apply调用模式
每个函数都接收两个附加参数:this, arugments
实际参数与形式参数个数不匹配时不会报错
过多的参数会被忽略
缺少的参数为undefined
方法调用模式
方法:一个函数被保存为对象的一个属性
一个方法被调用时,this被绑定至该对象
公共方法:通过this可取得所属对象的上下文的方法
函数调用模式
var sum = add(3,4);
以这种方式调用函数,this被绑定到全局对象
以这种方式调用函数,this被绑定到全局对象
使用var that = this来解决
构造器调用模式
使用new来调用函数
var Quo = function(string){
this.status = string;
}
var myQuo = new Quo("str");
var Quo = function(string){
this.status = string;
}
var myQuo = new Quo("str");
创建一个连接到该函数的prototype成员的新对象,this被绑定至新对象
Apply调用模式
接收两个参数,(要绑定给this的值,参数数组)
var statusObject = { status: 'A-ok' };
//statusObject没有继承Quo.prototype,但可调用Quo原型方法
var status = Quo.prototype.get_status.apply(statusObject);
//statusObject没有继承Quo.prototype,但可调用Quo原型方法
var status = Quo.prototype.get_status.apply(statusObject);
参数
arguments只是类似数组的对象。拥有一个length属性。不具有任何数组方法
返回
一个函数总会返回一个值。若没有指定则返回undefined
若函数调用时在前面加了new前缀,且返回值不是一个对象,则返回this(新对象)
异常
throw
一个try语句只会有一个捕获所有异常的catch代码块
扩充类型的功能
Function.prototype.method = function(name, func){
if(!this.prototype[name]){
this.prototype[name] = func;
}
return this;
}
if(!this.prototype[name]){
this.prototype[name] = func;
}
return this;
}
作用域
具有函数作用域。
在函数体的顶部声明函数中可能用到的所有变量。
闭包
糟糕的例子
var add_the_handlers = function(nodes){
var i;
for(i = 0; i < nodes.length; i++){
nodes[i].onclick = function(e){
alert(i);
}
}
}
var add_the_handlers = function(nodes){
var i;
for(i = 0; i < nodes.length; i++){
nodes[i].onclick = function(e){
alert(i);
}
}
}
改良的例子
var add_the_handlers = function(nodes){
var helper = function(i){
return function(e){ alert(i); }
}
var i;
for(i = 0; i < nodes.length; i++){
nodes[i].onclick = helper(i);
}
}
var add_the_handlers = function(nodes){
var helper = function(i){
return function(e){ alert(i); }
}
var i;
for(i = 0; i < nodes.length; i++){
nodes[i].onclick = helper(i);
}
}
回调
同步请求会导致客户端进入假死状态。若网络传输或服务器很慢,响应更慢
发起异步请求,提供一个当服务器的响应到达时随即触发的回调函数。异步函数立即返回
模块
一般形式:一个定义了私有变量和函数的函数;
利用闭包创建可访问私有变量和函数的特权函数,
最后返回这个特权函数
利用闭包创建可访问私有变量和函数的特权函数,
最后返回这个特权函数
级联
让没有返回值的方法返回this,则可采用级联,
依次调用同一个对象的很多方法
依次调用同一个对象的很多方法
getElement('myBoxDiv')
.width(100)
.height(100)
.color("red")
.width(100)
.height(100)
.color("red")
柯里化
允许把函数与传递给它的参数相结合,产生一个新函数
记忆
e.g.用数组去保存fibonacci的结果,避免重复调用
0 条评论
下一页