您的位置:首页 > Web前端 > JavaScript

JavaScript引用类型--Function类型

2016-03-19 15:18 776 查看
JavaScript中,“函数是对象,函数名是指针”

函数通过两种方式定义:函数声明和函数表达式

函数声明:
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
};
错误原因在于函数位于一个初始化语句中,而不是一个函数声明


JavaScript中没有函数重载

函数可以作为值来使用,不仅可以像传递参数一样把一个函数传递给另一个函数

function callSomeFunction(someFunction, someArgument){
return someFunction(someArgument);
}

function add10(num){
return num + 10;
}
var result1 = callSomeFunction(add10, 10);
alert (result1);        //20

function getGreeting(name){
return "Hello" + name;
}

var result2 = callSomeFunction(getGreeting, "Nicholas");
alert (result2);    // "Hello Nicholas"


也可以将一个函数作为另一个函数的结果返回

function createComparisonFunction(propertyName){
return function(object1, object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];

if (value1 < value2){
return -1;
} else if (value1 > value2){
return 1;
} else {
return 0;
}
}
}


函数内部属性:

函数内部有两个特殊的对象: arguments 和 this

arguments是一个类数组对象,包含传入函数中的所有参数。其callee属性是一个指针,用于指向拥有这个arguments对象的函数


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


上面的程序定义没有问题,但是函数的执行与函数名factorial紧紧耦合,arguments.callee可以消除这种耦合现象

function factorial(num){
if (num <= 1){
return -1;
} else {
//return num * factorial(num -1);
return num * arguments.callee(num - 1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 函数