文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>JavaScript Complete(三) 函数

JavaScript Complete(三) 函数

时间:2008-04-05  来源:biaoflying

1,定义一个函数的三种方式
  function f(x){return x*x}//function语句
  //Function ctor在js1.1版本及以后有效
  var func=new Function("x","return x*x;")
  //js1.2版本及以后有效
  var func=function(x){return x*x;}//函数直接量
 
  a[0]=function(x){return x*x;}//定义函数并保存
  //定义一个函数并传递给另一个函数。
  a.sort(function(a,b){return a-b;})
  //定义一个函数并调用
  var tensquared=(function(x){return x*x;})(10)

2,函数就是数据
  function add(x,y){return x+y;}
  function subtract(x,y){return x-y;}
  function multiply(x,y){return x*y;}
  function divide(x,y){return x/y;}

  function operate(operator,operand1,operand2){
    return operator(operand1,operand2);
  }
  var i=operate(add,operate(add,2,3),
    operate(multiply,3,4));
 
3,arguments变量
  arguments表示函数执行时接受的实际参数的数组,因为js的函数调用是不限制传入参数的。arguments数组为实现变参函数提供了可能:
  function max(){
    var max=Number.NEGATIVE_INFINITY;
    for(var i=0;i<arguments.length;i++){
      if(arguments[i]>max)max=arguments[i];
    }
    return max;
  }
  max(1,2,45,43,1567,0);
 
  arguments的callee属性
  callee属性引用了当前正在执行的函数,这在匿名函数中实现递归是很有用的。
  function(x){
    if(x>1)return x*arguments.callee(x-1);
    return x;
  }
  arguments的caller属性
  实际参数对象的caller属性引用的是当前函数被调用的调用环境,arguments.caller引用的不是调用当前函数的那个函数,而是调用哪个当前函数的函数的实际参数对象。所以要引用调用函数必须使用argument.caller.callee.慎用arguments.caller属性。
  实例可以参见jc 7.4
 
3,Function的属性和方法
  1,length和arity属性
    length和arity 表示的是函数期望的参数个数,即函数在声明时使用的参数个数。arity是为了避免与数组的length属性发生冲突而引入的,意义与length属性相同。
   
function checkargs(){
    var expected=arguments.caller.callee.arity;
    var passed=arguments.caller.length;
    if(passed!=expected){
        var funcname=arguemnts.caller.callee.toString().
          match(/function (\w*)/)[1];
        alert("WARNING:\n"+
             funcname+"()"+" was invoked with wrong number of arguments!\n"
        );
  }
}
function f(x,y,z){checkargs();return x+y+z;}
f(1,2);

  prototype属性,留待以后讨论
  2,apply,call方法
    apply方法允许你调用函数就像该函数是某个对象的方法一样。
    f.apply(o,[1,2]);
    等价于:
    o.m=f;
    o.m([1,2])
    delete o.m;
  call方法的行为与apply类型,只不过掺入的是参数列表而不是参数数组。
    f.apply(o.[1,2])等价于f.call(o,1,2);
相关阅读 更多 +
排行榜 更多 +
我是班长去广告版下载

我是班长去广告版下载

模拟经营 下载
什么鸭小游戏安卓版下载

什么鸭小游戏安卓版下载

策略塔防 下载
极光影院官方最新版本2025下载

极光影院官方最新版本2025下载

趣味娱乐 下载