博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JavaScript之Function类型

Posted on 2017-09-07 14:52  开飞机的贝塔  阅读(178)  评论(0编辑  收藏  举报

每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法。由于函
数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函
数声明语法定义的,如下面的例子所示。

function sum (num1, num2) {
return num1 + num2;
}
这与下面使用函数表达式定义函数的方式几乎相差无几。
var sum = function(num1, num2){
return num1 + num2;
};

 

没有重载

同名的函数,后面的函数会覆盖前面的函数。

 

函数声明和函数表达式

解析器会率先读取函数声明,并使其在执行
任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真
正被解释执行。请看下面的例子。

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

如果改为函数表达式就会报错

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

 

函数的内部属性

在函数内部,有两个特殊的对象: arguments this。其中, arguments 在第 3 章曾经介绍过,
它是一个类数组对象,包含着传入函数中的所有参数。虽然 arguments 的主要用途是保存函数参数,
但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。
请看下面这个非常经典的阶乘函数。

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

函数内部的另一个特殊对象是 this,其行为与 Java C#中的 this 大致类似。换句话说, this
引用的是函数据以执行的环境对象——或者也可以说是 this 值(当在网页的全局作用域中调用函数时,
this 对象引用的就是 window)。来看下面的例子。

window.color = "red";
var o = { color: "blue" };
function sayColor(){
alert(this.color);
}
sayColor(); //"red"
o.sayColor = sayColor;
o.sayColor(); //"blue"

 

函数的属性和方法

每个函数都包含两个
属性: length prototype。其中, length 属性表示函数希望接收的命名参数的个数,如下面的例
子所示。

function sayName(name){
alert(name);
}
function sum(num1, num2){
return num1 + num2;
}
function sayHi(){
alert("hi");
}
alert(sayName.length); //1
alert(sum.length); //2
alert(sayHi.length); //0