概念:
对于js来说函数就是把任意一段代码放在一个盒子里,要使用代码时直接执行盒子里的代码就可以。
两种定义方式:
声明式:
使用function这个关键字来声明一个函数
语法:function fn(){
一段代码
}
function是声明函数的关键字;
fn是函数的名字,我们自己定义的
()必须写,是用来放参数的位置
赋值式:
首先使用var定义一个变量,把一个函数当做值直接赋值给这个变量就可以了
语法:
var fn=function(){
一段代码
}
函数调用阶段
就是让盒子里的代码执行一下
让函数执行
两种定义函数方式不一样,但是调用函数的方式都一样;
调用函数
调用函数就是直接写函数名就可以了
函数的参数
参数分为两种行参和实参;
// 声明式
function fn(行参写在这里) {
// 一段代码
}fn(实参写在这里)
// 赋值式函数
var fn = function (行参写在这里) {
// 一段代码
}
fn(实参写在这里)
行参和实参的作用
1.行参
就是在函数内部可以使用变量,在函数外部不能使用
每写一个单词,就相当于在函数内部定义了一个可以使用的变量(遵循变量名的命名规则和命名规范)
多个单词之间以,分开
// 书写一个参数
function fn(num) {
// 在函数内部就可以使用 num 这个变量
}var fn1 = function (num) {
// 在函数内部就可以使用 num 这个变量
}// 书写两个参数
function fun(num1, num2) {
// 在函数内部就可以使用 num1 和 num2 这两个变量
}var fun1 = function (num1, num2) {
// 在函数内部就可以使用 num1 和 num2 这两个变量
}
如果只有行参的话,那么在函数内部使用的值个变量是没有值的,也就是undefined
行参的值是在函数调用时由参数决定的
2.实参
在函数调用的时候给行参赋值的
也就是说早掉用的时候是给一个实际的内容的
function fn(num) {
// 函数内部可以使用 num
}// 这个函数的本次调用,书写的实参是 100
// 那么本次调用的时候函数内部的 num 就是 100
fn(100)// 这个函数的本次调用,书写的实参是 200
// 那么本次调用的时候函数内部的 num 就是 200
fn(200)
函数内部的行参的值,由函数调用的时候传递的实参决定
多个参数的时候,是按照顺序一一对应的
参数个数的关系
1.行参比实参少
因为是按照顺序一一对应的
行参少就会拿不到实参给的值,所以在函数内部就没有办法发用到这个值
function fn(num1, num2) {
// 函数内部可以使用 num1 和 num2
}// 本次调用的时候,传递了两个实参,100 200 和 300
// 100 对应了 num1,200 对应了 num2,300 没有对应的变量
// 所以在函数内部就没有办法依靠变量来使用 300 这个值
fn(100, 200, 300)
2.行参比实参多
因为是按照顺序一一对应的
所以多出来的行参就是没有值,就是undefined
function fn(num1, num2, num3) {
// 函数内部可以使用 num1 num2 和 num3
}// 本次调用的时候,传递了两个实参,100 和 200
// 就分别对应了 num1 和 num2
// 而 num3 没有实参和其对应,那么 num3 的值就是 undefined
fn(100, 200)
函数的return
return返回的意思,其实就是给函数一个返回值和终断函数
终断函数
当代码开始执行,函数内部的代码就会从上到下依次执行
必须要等到函数内部的代码执行完毕
而returrn关键字就是可以在函数中间的位置停掉,让后面的代码不再执行
function fn() {
console.log(1)
console.log(2)
console.log(3)
// 写了 return 以后,后面的 4 和 5 就不会继续执行了
return
console.log(4)
console.log(5)
}// 函数调用
fn()
返回值
函数调用本身也是一个表达式,表达式就应该有一个值出现
现在函数执行完毕之后,是不会有结果出现的
return 关键字就是可以给函数执行完毕一个结果
我们如果可以在函数内部使用return关键把任何内容当做这个函数运行后的结果