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

js学习(16)----函数声明和函数作为参数

2017-08-25 20:52 225 查看

1.函数声明和函数表达式

函数声明需要被调用才会执行相应的内容,而函数表达式则相当于调用了函数。

如下:

// 这是函数声明,没有看到;号
function sum(num1, num2) {
// 函数体
}


// 这是函数表达式
var result = function(num1, num2) {
// 函数体
}


2.声明提升(function declaration hoisting)

函数声明和函数表达式涉及到到函数声明提升的问题。

即在js中,函数声明会被提到顶部,解析器会率先读取函数声明,并使得其在执行任何代码之前可以执行;而表达式则必须等到解析器执行到它所在的代码行时,才会真正地被解释执行。

注:对于函数表达式中的函数定义是不会提前的。

注:对于变量,变量也会声明提前,但是变量的初始化则在代码所在的位置执行,不会提前。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p id="result">Show</p>
<script type="text/javascript">
alert(sum(4, 2));
function sum(num1, num2) {
return num1 + num2;
}
function sum(num1, num2) {
return (num1 + num2) * 2;
}
</script>
</body>
</html>


上面的代码可以正常的运行并且输出结果是12;

原因是:声明提前,但是因为第二个函数定义的名称与参数与第一个相同,所以覆盖了第一个,声明提前后,当执行到语句alert(sum(4, 2))时,就会得到相应的结果,所以是12。

3.函数作为参数

一个函数可以想传递参数一样传递给另一个函数。

举个例子:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p id="result">Show</p>
<script type="text/javascript">
function addOne(num) {
return num + 1;
}
function callSomeFunction(someFunction, someArgument) {
return someFunction(someArgument);
}
var result = callSomeFunction(addOne, 1);
alert(result);
</script>
</body>
</html>


4.返回一个函数

一个函数可以作为另外一个函数的结果返回。

举个例子:

注:数组的sort方法可以传入一个函数作为参数,因为如果是按照默认的排序方式的话,10小于2(因为1的ASCII码比2小),但是这不符合我们的要求,所以常常会传入一个比较函数。

<script type="text/javascript">
function createCompareFunction(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;
}
}
}
var data = [{name:"Ann", age:20}, {name:"Tome", age:22}];
data.sort(createCompareFunction("name"));
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息