函数: function执行特定任务的代码块
函数的作用: 可以实现代码复用,提高开发效率
函数的声明语法:
function sayHi (){
document.write('hi~')
}
函数名命名规范:
- 和变量命名基本一致
- 尽量小驼峰式命名法
- 前缀应该为动词
- 命名建议:常用动词约定
函数的使用:
函数调用:函数名()
注意点:1.声明(定义)的函数必须调用才会真正地被执行,使用()调用函数
2.函数可以多次被调用,每一次函数调用函数体里面的代码会重新执行一次
3.函数 的功能代码都要写在函数体当中
函数的复用代码和循环重复代码区别:
循环代码写完即执行,不能很方便控制执行位置
随时调用,随时执行,可重复调用
函数的传参:
- 形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
- 实参: 调用函数时写在函数名右边小括号里的叫实参(实际上的参数)
- 形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)实参可以理解为是给这个变量赋值
- 尽量保持形参和实参个数一致
- 函数参数中间使用逗号隔开
函数传参的好处是:极大的提高了函数的灵活性
// 参数可以让 函数变得更加灵活
// 1.形式参数 形参 在定义函数时 函数后面的小括号里面的变量名 变量名前面不要加声明变量的关键字
// 2..实际参数 实参 在调用函数 在函数名后面的小括号里面的具体的内容
// 在调用函数时 会将 函数的实际参数 赋值给 形式参数
// 形参
function getSum(num1, num2) {
console.log(num1 + num2)
}
// getSum(实参)
getSum(10, 50) // 第一次调用函数将 10赋值给num1 将 20 赋值为num2
getSum(30, 40) // 第一次调用函数将 30赋值给num1 将 40 赋值为num2
参数默认值:
形参:可以看做变量,但是如果一个变量不给值,默认是undefined
但是如果做用户不输入实参,就出现undefined+undefined=NaN的结果
// 如果调用函数时,用户没有传递参数,可以使用es6的新语法 给函数的形参赋值为0
// 这个默认值只会在没有实参的情况下 才会把默认值传给实参
function getSum(num1 = 0,num2 = 0) {
document.write(num1 + num2)
}
getSum() //0
getSum(10,20) //num1=10 num2=20
这个默认值只会在缺少实参参数传递时 才会被执行,所以有参数会优先执行传递过来的实参, 否则默认为 undefined.
函数的返回值:
当函数需要返回数据出去时,用return关键字
//为什么要返回:因为不同的场景可以使用这个值
return 数据
注意点:
- 在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用
- return 后面代码不会再被执行,会立即结束当前函数,所以 return 后面的数据不要换行写
- return函数可以没有 return,这种情况函数默认返回值为 undefined
函数的覆盖:
- 两个相同的函数后面的会覆盖前面的函数
- 在Javascript中 实参的个数和形参的个数可以不一致
- 如果形参过多 会自动填上undefined (了解即可)
- 如果实参过多 那么多余的实参会被忽略 (函数内部有一个arguments,里面装着所有的实参)
- 函数一旦碰到return就不会在往下执行了 函数的结束用return
break结束和return结束的区别:
- break是跳出整个循环的结束
- return是跳出当前函数的结束
作用域:
- 全局作用域:作用于所有代码执行的环 境(整个 script 标签内部)或 者一个独立的 js 文件
- 局部作用域:作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系, 所以也称为函数作用域。
let num1 = 20 //全局变量
function getArr() {
//局部变量只能在函数内部使用
let a = 1
console.log(a)
//在这个里面 访问全局变量
console.log(num1);
}
getArr()
// 想要在 全局作用域的地方 访问 局部变量
变量作用域在js中的特殊情况:
- 如果函数内部,变量没有声明,直接赋值,也当全局变量看
- 只有函数内部的形参可以看做是局部变量。
// 需要在 全局作用域 先声明这个变量
let a
function getA(){
// 变量一定要加 声明变量的关键字 在函数内部 如果没有加 声明变量的关键字 这个变量就会被看作 全局变量
// 推荐做法: 在 全局变量作用域 先声明这个变量 在函数里面 相当于 在使用全局变量 给全局赋值
a = 2
}
getA()
console.log(a)
变量访问原则: 采取就近原则的方式来查找变量最终的值
匿名函数:
匿名的函数使用方式分为两种:1. 函数表达式 2.立即执行函数
- 函数表达式:将匿名函数赋值给一个变量,并且通过变量名称进行调用
// 定义函数两种方式
// 1.function 函数名 (){}
// 2.函数表达式 把函数当做为变量的值赋值为 一个变量
// const 变量名 =function(){
// }
const fn = function (name){
console.log(name);
}
fn('吃西瓜')
- 立即执行函数:不需要调用,直接执行.多个立即执行函数要用 ; 隔开,要不然会报错
// 立即执行法
// 匿名函数自调用
// 防止变量名冲突
;( function (){
console.log('西瓜不甜');
}())
; (function(){
console.log(123);
})()
立即执行函数的作用: 防止变量污染
短路运算:
逻辑运算符中的短路运算:
- 短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行
- 原因:通过左边能得到整个式子的结果,因此没必要再判断右边
- 运算结果:无论 && 还是 || ,运算结果都是最后被执行的表达式值,一般用在变量赋值
隐式转换(转换成boolean):
- 有字符串的加法 “ ” + 1 ,结果是 “1”
- 减法 - (像大多数数学运算一样)只能用于数字,它会使空字符串 "" 转换为 0
- null 经过数字转换之后会变为 0
- undefined 经过数字转换之后会变为 NaN