本文目录
- 1.函数的语法结构
- 2.参数
- 3.返回值
- 4.变量的作用域
函数就是具有名称和一定功能点代码块,这段代码块被封装起来,由一组语句组成,它们是JavaScript的基础模块单元,用于代码复用、信息隐藏和组合调用。
在JavaScript中,函数可以
- 作为值赋给一个变量
- 作为参数传递给另一个函数
- 作为另一个函数的返回值
由于函数的强大功能,所以我们说函数是JavaScript中的“一等公民”。
1.函数的语法结构
函数的定义语法:(必须这样写,规定死了的)
function 函数名字(){
这里写功能代码
}
总结:函数定义前面必须加关键字function,函数调用必须用函数名称加括号的形式,()表示执行(调用)函数,()前加名称代表执行的是哪个函数
赋值:
var foo = function() {
console.log("Hello World!");
};
foo();
以上代码把一个匿名函数( Anonymous Function)赋值给了变量foo。你也可以使用具名函数,这样有利于Debug,但要注意,使用具名函数不会影响函数的调用方法,仍然是通过变量名加一对圆括号foo()来调用该函数。
2.参数
函数的参数到底是什么鬼?参数本质上就是函数内部需要用到的变量,函数的结果会根据外部传入的变量值的不同而发生改变。函数可以有参数也可以不用参数,参数多少也由函数功能决定。
函数的参数分为形参和实参,函数定义的时候,写在()中的变量,叫作函数的形参,可以理解为形式上的参数,本质上就是在函数内部使用到到变量。
函数在调用的时候传入到参数叫作函数的实参,也就是说传入的是一个具体的值,可以理解为实际的参数。函数调用的时候,传入一个具体的值,在函数内部用对应的形参接收,拿去参与具体的运算
总结:函数在调用传参的时候一定要注意一个原则,那就是必须要根据函数形参的要求来进行实际参数的传值。位置顺序也必须一一对应。
var sayHello = function() {
return "Hello, ";
}
var greeting = function(helloMessage, name) {
console.log(helloMessage() + name);
};
greeting(sayHello, "Suki"); // "Hello, Suki
这里把函数sayHello当作参数传给了函数greeting,像函数sayHello这样被作为参数传递的函数就叫回调函数(Callback Function),而像函数greeting这样可以接收另一函数作为参数的就叫高阶函数(High-order Function)。
3.返回值
函数的返回值就是函数被调用后返回的结果,当一个函数被调用时,它从第一句开始执行,并在遇到关闭函数体的}时结束。然后函数把控制权交给调用该函数的程序。函数的返回值用return关键字加上返回的结果,也就是说,用return关键字,指定一个函数的返回结果。
return语句用来提前返回。当return被执行时,函数立即返回而不再执行余下的语句。例如:
function showNum(num){
if(num==1){
return ;
}
num++;
console.log(num);
}
showNum(1);//什么结果都没有,里面做了判断,当传的值num==1的时候,执行了return语句,程序提前返回,不会执行后面的代码;
showNum(2);//在控制台输出3 因为前面if里面return语句没有执行,所以num由2加到3并且输出3
一个函数总是会返回一个值,如果没有指定返回值,则返回undefined。从这句话可以看出,return的功能就是指定一个返回值,如果没有指定那么函数就返回undefined
实例:
function add(num1,num2){
var result = num1+num2;
}
var result = add(1,2);
console.log(result);//这里输出结果为undefined,函数add内部没有指定函数的返回结果,默认返回undefined,因此打印出的结果就是undefined 而不是3
var foo = function() {
return function() {
console.log("Hello, world!");
};
};
//调用方法一:把函数返回值赋值给另一变量
var sayHello = foo();
sayHello(); //"Hello, world!"
//调用方法二:使用两对圆括号
foo()(); //"Hello, world!"
注意:如果仅仅是调用了函数foo,则只是返回了另一个函数,而没有执行那个函数。
像函数foo这种可以把另一个函数当作返回值的函数也叫高阶函数(High-order Function)。
function add(x, y, callback) {
console.log(1)
setTimeout(function () {
var ret = x + y
callback(ret)
}, 1000)
}
add(10, 20, function (ret) {
console.log(ret)
})
当一个函数,需要用到另外一个当做参数的时候,简单一句话总结用法就是:内部传参,外部传方法。
4.变量的作用域
var a = 12;
function fn1(){
var a = 11; //这里在函数到内部定义了一个变量a,这个变量为局部变量;
alert(a);//这里弹出到变量就是局部变量a 结果为11
}
function fn2(){
alert(a);//这里使用到是全局变量a,值为12
}
fn1();//弹出11
fn2();//弹出12
总结:函数内部可以直接使用函数外定义的全局变量,在函数内部使用全局变量的时候不要加var关键字,否则就变成了重新定义一个局部变量了。如何在实际应用中灵活定义变量呢?如果变量的数据只在函数内部使用,请使用局部变量。如果变量的数据函数内部和外部都要使用,请使用全局变量。