定义函数
写法一:函数声明(推荐写法)
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
上述abs()
函数的定义如下:
function
指出这是一个函数定义;abs
是函数的名称;(x)
括号内列出函数的参数,多个参数以,
分隔;{ ... }
之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句。
提示:JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。
请注意,函数体内部的语句在执行时,一旦执行到return
时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return
语句,函数执行完毕后也会返回结果,只是结果为undefined
。
写法二:函数表达式(推荐写法)
由于JavaScript的函数也是一个对象,上述定义的abs()
函数实际上是一个函数对象,而函数名abs
可以视为指向该函数的变量。
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};
在这种方式下,function (x) { ... }
是一个匿名函数,它没有函数名。但是,这个匿名函数赋值给了变量abs
,所以,通过变量abs
就可以调用该函数。
注意第按照完整语法需要在函数体末尾加一个;
,表示赋值语句结束。
函数声明与函数表达式
解析器在向执行环境中加载数据时,对「函数声明」和「函数表达式」并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。例如:
console.log(sum(10,10)); // 20
function sum(num1, num2){
return num1 + num2;
}
以上代码完全可以正常运行。因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对代码求值时,JavaScript 引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码在调用它的代码后面,JavaScript 引擎也能把函数声明提升到顶部。把上面的「函数声明」改为等价的「函数表达式」,就会在执行期间导致错误。例如:
console.log(sum(10,10)); // Uncaught TypeError: sum is not a function
var sum = function(num1, num2){
return num1 + num2;
};
除了上述区别之外,「函数声明」与「函数表达式」的语法是等价的。
写法三:Function 构造函数(不推荐写法)
var abs = new Function('y', 'if (y >= 0) {return y} else {return -y}');
//这我瞎蒙的,居然不报错,JavaScript真牛
var abs = new Function('x', 'return x >= 0 ? x : -x');
// 三元运算符
调用函数
调用函数时,按顺序传入参数即可:
abs(10