函数是什么?
函数:就是封装重复执行的代码块
函数的使用一般分为两步
1.声明函数
function 函数名() {
//函数体代码
}
function是声明函数的关键字,必须要小写
函数是为了实现某个功能才被定义的,所以我们常常用动词做前缀来作为函数的名字
2.调用函数
// 调用函数
函数名(); // 通过调用函数名来执行函数体代码
调用函数就是使用函数名字加()来调用,像之前常用的alert和prompt()都是封装好的函数来供我们使用
⚠️声明函数本身并不会执行代码,只有调用函数时才会执行函数体代码
2.1函数的封装
函数的封装就是把一个或者多个功能来通过函数的方式封装起来,来对外只提供一个简单的函数接口,有点像c3我们学习到的动画
3.函数的参数
函数的参数分为形参和实参
形参:形式上的参数,函数定义的时候传递的参数,当前并不知道是什么
实参:实际的参数,函数调用的时候传递的参数,实参是传递给形参的
在函数内部的值不能固定的时候,我们可以通过参数在调用函数时传递不同的值进去
形参可以简单理解为:不用声明的变量
形参和实参的多个参数之间要用,隔开
函数的默认参数
一个形参不给值默认是underfind
所以当用户不输入实参的时候 就会出现nundfined+undefined结果就为nan
所以我们可以给形参默认值为0来解决这个问题,优化代码
如果有实参传递过去的话,会优先执行实参里的数
实参也可以是变量
let num1 = +prompt('请输入起始值:')
let num2 = +prompt('请输入结束值:')
// 调用函数
getSum(num1, num2) // 实参可以是变量
函数的返回值
当函数需要把数据返回给调用者的时候,使用return关键字
function 函数名() {
return 需要返回的结果;
}
注意:函数中只能出现一次return ,
return后面的代码不会执行,会直接退出函数
(函数可以没有return,这种情况默认返回值为underfined)
作用域
作用域的使用提高程序逻辑的局部性,增加了程序的可靠性,减少了名字的冲突
作用域分为全局作用域和局部作用域
全局作用域:作用于所有代码的整个环境,或者一个独立的js文件,处于全局作用域内的变量,称为全局变量
局部作用域:处于函数内的代码环境,叫做局部作用域,也加函数作用域
作用域链:内部函数访问变量,先在自身作用域找声明,如果没有,往外层找,直到找到全局,如果有,采取就近原则
注意:一定要先声明在赋值
匿名函数和具名函数
函数可以分为具名函数和匿名函数
具名函数就是声明了的函数
匿名函数就是没有声明的函数
// 匿名函数
function() {
console.log('函数表达式')
}
// 具名函数
function getnum() {
console.log('函数表达式')
}
立即执行函数
有两种写法
一:(function(){})()
二:(function(){} ())
立即执行函数,不用调用直接就会执行,多个立即执行函数之间用分号隔开,可以写在函数前面,也可以写在函数后面
声明的变量只会在立即执行的函数里生效
逻辑中断
逻辑与 :只要碰到了假值(false),就会短路,并返回该假值, 只要短路,不会继续执行后面的表达式。
console.log( 123 && 456 ); // 456
console.log( 0 && 456 ); // 0
console.log( 123 && 456&& 789 ); // 789
逻辑或 :只要碰到了真值(true),就会短路,并返回该真值, 只要短路,不会继续执行后面的表达式。(一般用作默认值))
console.log( 123 || 456 ); // 123
console.log( 0 || 456 ); // 456
console.log( 123 || 456 || 789 ); // 123
转换为布尔型
-
代表空、否定的值会被转换为 false ,如 ' '、0、NaN、null、undefined
console.log(Boolean('')); // false console.log(Boolean(0)); // false console.log(Boolean(NaN)); // false console.log(Boolean(null)); // false console.log(Boolean(undefined)); // false console.log(Boolean('小白')); // true console.log(Boolean(12)); // true