函数
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
比如我们有一个特定的功能需要三条语句实现
s1;
s2;
s3;
那么每次想实现这个功能的时候就需要写这三句话,很麻烦,我们可以把这三条语句打包为一个函数
function doSomething(){
s1;
s2;
s3;
}
这样每次想实现功能的时候我们就调用一下函数就可以了,调用函数通过函数名称()
的形式调用
doSomething();
函数可以拥有参数,参数影响函数的行为。
函数也可以用过返回值,将函数的运行结果反馈给函数的调用者。
函数声明
JavaScript 使用关键字 function 定义函数。
函数可以通过声明定义,也可以是一个表达式。
Function() 构造函数
首先函数也是对象的一种,我们可以通过其构造函数,使用new
来创建一个函数对象
函数的参数写在前面,函数体写在后面即可
var myFun = new Function("a", "b", "return a * b");
myFun(1,2) // 3
不推荐使用
函数声明
function functionName(){
statement;
}
使用function
关键字可以声明一个函数,看个例子
function myFunction(a, b) {
return a * b;
}
函数表达式
JavaScript 函数可以通过一个表达式定义。
函数表达式可以存储在变量中:
var myFun = function (a, b) {return a * b};
以上函数实际上是声明一个 匿名函数 (也就是没有名称的函数);然后将这个函数存在变量 myFun
中。
auguments
在函数内部,你可以使用arguments
对象获取到该函数的所有传入参数
function myFun(a, b){
console.log(a);
console.log(b);
console.log(arguments);
}
已不推荐使用
返回值
有时候我们希望在函数执行后给我们一个反馈,就像表达式一样,给我们个结果,我们可以通过return
来实现
function myFun(a, b){
return a + b;
console.log("never run")
}
var result = myFun(2, 3);
这样我们就能拿到函数希望给我的反馈了,调用return后,函数立即中断并返回结果,即使后面还有语句也不再执行
其实我们不写return语句,函数也会默认给我们返回undefined
函数提升
提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为。
提升(Hoisting)应用在变量的声明与函数的声明。
因此,函数可以在声明之前调用:
console.log(fn); // undefined,但是不会报错
var fn = function(){}
这是因为JS自动将函数声明提升了。
以上代码等价于:
var fn;
console.log(fn);
fn = function(){}
但是如果我们使用函数声明的方式,那么即使函数写在最后也可以在前面语句调用,
fn(); // "1"
function fn(){
console.log('1');
}
这是因为以上代码等价于:
function fn(){
console.log('1');
}
fn(); // "1"