函数
什么是函数
function,函数是被设计为执行特定任务的代码块
函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,这么做的优势是有利于精简代码方便复用。
函数的声明和调用
1.函数声明
函数名命名规范
- 和变量命名基本一致
- 尽量小驼峰式命名法
- 前缀应该为动词
- 命名建议:常用动词约定
2.函数调用
函数的调用语法
- 注意:声明(定义)的函数必须调用才会真正被执行,使用 () 调用函数
// 1 声明函数
function 函数名(){
函数体
}
// 2. 函数调用
函数名()
函数传参
声明语法
参数列表
- 传入数据列表
- 声明这个函数需要传入几个数据
- 多个数据用逗号隔开
调用函数时,需要传入几个数据就写几个,用逗号隔开
- 形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
- 实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
- 形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)实参可以理解为是给这个变量赋值
- 开发中尽量保持形参和实参个数一致
函数传参-参数默认值
形参: 可以看做变量,但是如果一个变量不给值,默认是什么?
- undefined
但是如果做用户不输入实参,刚才的案例,则出现 undefined + undefined 结果是什么?
- NaN
我们可以改进下,用户不输入实参,可以给形参默认值,可以默认为 0, 这样程序更严谨,可以如下操作:
function getSum(x=0, y=0) {
// x y 不给默认值就是undefind
document.write(x + y)
}
getSum() //假设用户不传入实参,会导致相加的结果是NaN
getSum(3,6) //9
说明:这个默认值只会在缺少实参参数传递时,才会被执行,所以有参数会优先执行传递过来的实参, 否则默认为 undefined
函数的返回值
当函数需要返回数据出去时,用return关键字
function getSum(arr) {
let sum = 0
for (let i = 0; i < arr.length; i++) {
sum += arr[i]
}
return (sum)//返回结果
}
let res = getSum([1, 4, 7, 3, 7, 3,8]) //将返回的结果用一个变量接收
document.write(res) //将结果显示出来
细节:
- 在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
- return 后面代码不会再被执行,会立即结束当前函数,所以 return 后面的数据不要换行写
function fn1(x, y) {
console.log(111) // 可以执行
return x + y
console.log(1112222) // 不会执行
// 1 return关键字后面的代码不会被执行
// 2 return关键字后面的数据不要换行,否则会出现 undefined
}
console.log(fn1(3, 4))
- return函数可以没有 return,这种情况函数默认返回值为 undefined
function fn() {
}
let re = fn()
console.log(re) //控制台输出undefined
函数细节补充
1.两个相同的函数后面的会覆盖前面的函数
2.函数一旦碰到return就不会在往下执行了 函数的结束用return
3.在Javascript中 实参的个数和形参的个数可以不一致
- 如果形参过多 会自动填上undefined (了解即可)
- 如果实参过多 那么多余的实参会被忽略 (函数内部有一个arguments,里面装着所有的实参)
// 1 函数名相同 后面的会覆盖前面的
function fun() {
console.log(111)
}
function fun() {
console.log(222)
}
fun() // 输出222,会覆盖前面的111
// 2 参数不匹配
function fun1(x, y) {
console.log(x + y)
}
// 2.1 实参多余形参,剩余的实参不参与运算
fun1(1, 2, 3) // 3
// 2.2 实参少于形参 [会得到结果]([url]([url]([url]([url](url))))) NaN
fun1(5) // 5 + undefined = NaN