当方法不需要返回值的时候,最好返回this,这个就可以进行链式调用风格的编程
arguments[ ]实参对象
可以获得函数的实参
callee和caller属性
callee:返回被执行函数的对象,可以在匿名函数中递归调用
var factorial = function(x) {
if (x<=1) return 1;
return x * arguments.callee(x-1);
};
函数的call()和apply()方法
我们可以将call()和apply()看做是某个对象的方法,通过调用方法的形式来间接调用函数
要想以对象o的方法来调用函数f(),可以这样使用call和apply()
f.call(o);
f.apply(o);
等同于
o.m = f; // 将f存储为o的临时方法
o.m(); // 调 用 它 ,不传入参数
delete o.m; //将临时方法删除
call的第一个参数是要调用此方法的对象,接下来就各个参数.
apply和call差不多,只是它的参数都放在一个数组中
f.call(o,1,2);
f.apply(o,[1,2]);
闭包
能够访问另一个函数作用域中的变量的函数
var scope = "global scope"; <span style="font-family: Arial, Helvetica, sans-serif;">/ / 全 局 变 量</span>
function checkscope() {
var scope = "local scope"; <span style="font-family: Arial, Helvetica, sans-serif;">/ / 局 部 变 量</span>
function f() { return scope; }
return f; <span style="font-family: Arial, Helvetica, sans-serif;">/ / 在 作 用 域 中 返 回 这 个 值</span>
}
checkscope()()<span style="font-family: Arial, Helvetica, sans-serif;">/ / 返 回 值 是 什 么 ?local scope</span>