JS高级程序设计——Function类型

来源:互联网 发布:修改路由器lan口mac 编辑:程序博客网 时间:2024/05/24 15:41

Function 类型

  函数实际上是对象,具有属性和方法。函数名是一个指向函数对象的指针。

一、函数的定义:

1. 函数声明语法:

function sum(num1,num2)
{
return num1+num2;
}

2. 函数表达式:

var sum=function(num1,num2)
{
return num1+num2;
};

在执行环境中加载数据时,解析器会率先读取函数声明,并使其在执行任何代码前可用,而函数表达式则需要按照顺序读取到。

函数没有重载,因为相同名字的函数,后者会覆盖前者。

函数可以作为值来传递、返回。

二、 函数内部属性

1. arguments  保存函数参数。有一个callee属性,该属性是一个指针,指向拥有这个arguements对象的函数。

function factorial(num)
{
if(num<=1)
return 1;
else
return num*arguments.callee(num-1);
}

2. this 函数据以执行的环境对象。在全局中调用函数时,this=window

window.color="red";
function saycolor()
{
alert(this.color);
}
saycolor();//"red"

以上为两个函数内部的对象

函数对象的属性:caller 该属性保存着调用当前函数的函数的引用。如果是在全局作用域中调用当前函数,它的值为null。

function outer()
{
inner();
}
function inner()
{
alert(inner.caller);
//等同于 alert(arguments.callee.caller);但是不推荐
}
outer();//显示outer函数的源代码

三、函数属性

  • length 表示函数希望接受的命名参数的个数。
  • prototype 保存所有实例方法。

四、函数方法

(前两个:非继承,都是在特定的作用域中调用函数)

  • apply (运行函数的作用域,参数数组/arguments对象)

    function sum(num1,num2){    return num1+num2;}function callsum1(num1,num2){    return sum.apply(this,arguments);}function callsum2(num1,num2){    return sum.apply(this,[num1,num2]);}alert(callsum1(10,10);//20alert(callsum2(10,10);//20
  • call 方法与apply相似,不同的是,需要将传入的参数都罗列出来return sum.call(this,num1,num2);

  • bind 会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。

    var o={color:"blue"};function saycolor(){    alert(this.color);}var objectSaycolor=saycolor.bind(o);objectSaycolor();//blue
0 0
原创粉丝点击