参数 arguments
当一个函数被调用时候,会得到一个argments数组的参数。通过它函数可以访问所有它被调用时传递给他的参数列表,包括没有在函数定义时定义的多余参数。
这个arguments不是真正的数组,只有一个length的属性,并且能够通过index遍历。
返回 return
return语句用于返回。
如果没有指定返回值,则返回undefined。
如果函数用new方式来调用,且返回值不是对象,那么返回this(该新对象)。
异常 Exception
var add = function (a, b)
{
if(typeof a != 'number' || typeof b != 'number')
{
throw {name: 'TypeError', message: 'add needs members'};
}
}
var try_it = function ()
{
try {
add("sevem", "ee");
}
catch(e)
{
alert(e.name);
}
}();
给类型增加方法
Function.prototype.method = function (name, func)
{ if(!this.prototype[name])
{
this.prototype[name]=func;
return this; }
};
Number.method('ins', function(){
return 2;
});
(3).ins();// value is 2.
作用域 scope
js有函数的作用域,所以定义在函数中的参数和变量在函数外部是不可见的。而且在一个函数中的任何位置定义的变量在该函数中的任何地方都可见。
在js上不用尽可能迟的申明变量,而最好的做法是在函数体的顶部声明函数中可能用到的所有变量。
闭包 closure
作用域的好处就是内部的函数可以访问定义它们的外部函数的参数和变量(除了this和arguments)。
1、作为一个函数变量的一个引用,当函数返回时,处于激活状态。
2、一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
var quo= function (status)
{
return{
get_status:function() {
return status;
}
};
};
var myQuo = quo("amazed");
myQuo.get_status();
如上代码所示,即使quo已经返回了,但是get_status方法仍然享有访问quo对象的status属性的特权。get_status方法并不是访问该参数的一个拷贝,它访问的是该参数本身。因为该函数可以访问它被创建时所处的上下文环境。这被称为闭包。
回调 Callbacks
把函数作为参数传递给函数,它将在收到响应时被调用。
模块 Module
我们可以用函数和闭包来构造模块。模块是一个提供接口却隐藏状态与实现的函数或对象。
级联 Cascade
方法返回this而不是undefined.