函数的封装和使用,作用域
一.函数的使用
function 函数名() {
函数体
}
例:
function sayHi() {
document.write('哈喽')
}
2.函数名命名规范
➢ 和变量命名基本一致
➢ 尽量小驼峰式命名法
➢ 前缀应该为动词
➢ 命名建议:常用动词约定
动词:
can:判断是否可执行某个动作
has:判断是否含义某个值
is:判断是否为某个值
get:获取某个值
set:设置某个值
load:加载某些数据
3.函数不调用自己不执行,调用方式:函数名()
可重复调用
二.函数传参
1.形参和实参
function getSum(num1,num2) { //形参
document.write(num1 + num2)
}
getSum(10,20) //实参
➢ 形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
➢ 实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
➢ 形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)实参可以理解为是给这个变量赋值
➢ 开发中尽量保持形参和实参个数一致 ➢ 我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参
2.形参如果不被赋值,就是undefined
function getSums(a = 0, b = 0) { //实参没有数值或只有一个数值时,形参设置个默认值为0,防止出现NaN,实参若有值,还是以实参为主,无视默认值0
return sum = a + b
}
document.write(getSums(9, 10))
三.函数的返回值
1.return返回数据
注意点:
➢return在当前函数内只能出现一次,return(会立即结束当前函数)后面的代码不再执行
➢ return后面不接数据或者函数内不写return,函数的返回值是undefined
例子:
function getSum(num1, num2) {
return num1 + num2
}
let res = getSum(10, 20)
console.log(res);
2.return返回多个值
//封装一个计算两个数字的和和差的函数
function getSum(a, b) {
let he = a + b
let cha = a - b
return [he, cha]
}
let res = getSum(1, 3)
console.log(`和为${res[0]}`);
console.log(`差为${res[1]}`);
四.作用域(就近原则):限定了名字的可用性范围就在这个名字的作用域,减少了声明变量名字冲突的bug
1.全局作用域:全局有效
2.局部作用域:局部有效
3.块级作用域:{}内有效,if语句和for循环语句里面的{}等等
注意点:如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当全局变量看,但是强烈不推荐
特殊情况: 函数内部的形参可以看做是局部变量
function fn(x, y) {
// x 和 y 可以看做是 局部变量
document.write(x + y)
}
fn(1, 2)
五.立即执行函数
// 立即执行函数,作用:避免重复声明变量名导致代码bug
(function () { //因为是立即执行函数,所以()前面不需要再写函数名了
let a = '张翠花'
console.log(a);
}
)();
(function () {
let a = '李狗蛋'
console.log(a);
}
)();
六.伪数组:arguments
特点:伪数组无法使用一些数组的方法,如pop、push... 但length属性还是有的
例子:数组求和案例
function getSum() {
let sum = 0
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i]
}
return sum
}
let res = getSum(10, 20, 30) //这里不要中括号
document.write(res)