# 04 函数的使用
1.函数定义
function add(a, b, c) {
var d = 0
d += a
d += b
d += c
return d
}
函数的常规格式是以关键词function
开头,add
(加法)是函数的名称,圆括号中的a b c则表示函数有3个可输入的参数,return
表示函数会返回一个值
2.函数调用
函数调用的格式是: 函数名(参数1,参数2…)
function add(a, b, c) {
var d = 0
d += a
d += b
d += c
return d
}
console.log(add(1,2,3)) //输入1 2 3, 返回6
console.log(add(4,5,6)) //输入4 5 6, 返回15
console.log(add(4,5,6,7)) //输入4 5 6 7, 多了7这个参数, 照样返回15
console.log(add(4,5)) //输入4 5, 缺了一个参数, 返回NaN(not a number)意味着参与计算过程出现错误
//当undefined跟数字发生运算就会产生NaN, 如 undefined+1
3.函数参数
在函数中插入log追查参数在函数中的实际值
function add(a, b, c) {
console.log('a b c的值分别是:',a+'', b+'', c+'') //显示 a b c 的值
var d = 0
d += a
d += b
d += c
console.log('返回:',d)
return d
}
//先单独演示这个,
add(3,2,1) //输入3 2 1, 返回6
add(4,5,6) //输入4 5 6, 返回15
add(4,5,6,7) //输入4 5 6 7, 多了7这个参数, 照样返回15
add(4,5) //输入4 5, 缺了一个参数, 缺失的参数会以undefined的值参与运算, 当undefined跟数字发生运算就会产生NaN
4.函数返回
当函数运行到第一个return
语句时,就会立即带着返回值跳出函数,往后的代码不会被执行
function add(a, b, c) {
var d = 0
return d//这行再往下移一点试试?
d += a
d += b
d += c
return d
}
console.log(add(3,2,1))
console.log(add(4,5,6))
console.log(add(4,5,6,7))
console.log(add(4,5))
5.匿名函数
函数可以没有名字,没有名字的函数叫做匿名函数,但没了名字怎样调用呢?
function(a, b, c) {
var d = 0
d += a
d += b
d += c
return d
}
可以把整个函数表达式当作数据赋值给变量或属性,即函数本身可以作为数据存储在变量或对象属性里
var add = function(a, b, c) {
var d = 0
d += a
d += b
d += c
return d
}
console.log(add(1,2,3))
那存到变量的匿名函数,跟带名字的函数有啥区别呢?
在下面这种情况有区别:
如果在函数声明之前调用函数,存到变量的函数,会因为函数未被定义而报错
console.log(add(1,2,3))// add未被赋值而报错
var add = function(a, b, c) { //在add被调用之后才被定义
var d = 0
d += a
d += b
d += c
return d
}
而带名字的函数则允许你在定义之前调用,因为js引擎在运行时会自动把它移到代码最上方
console.log(add(3,2,1))// 运行正常, 因为add的定义被js引擎自动提前运行
function add(a, b, c) {// add作为有名函数, 会被自动提升到代码最上方, 所以能正常运行
var d = 0
d += a
d += b
d += c
return d
}
6.箭头函数
此外,还有另一种函数定义方式跟匿名函数相似,叫做"箭头函数"
var mul = (a, b, c) => a * b * c // 省略大括号的写法, 如果函数里的表达式简单不用分行可以这样写
calc(add)
calc(mul)
// 下面的运行结果跟上面一样
calc((a, b, c) => {
return a + b + c
})
calc((a, b, c) => a * b * c)
它的写法更简洁,大多数时候作为参数传进其他函数里,作用跟普通函数基本一致
7.全局函数
把add函数以ADD为名暴露到全局,这样控制台也能访问
function add(a, b, c) {
var d = 0
d += a
d += b
d += c
return d
}
global.ADD = add // 把add函数赋值给global对象的ADD属性