函数
函数概述
函数相当于一个代码空间,他里面可以存储一些代码片段,一般我们会将一些功能性代码抽取放入到函数内,这样的操作就是封装。核心就是利用函数来减少冗余代码的出现,形成对应的复用。
函数的分类
系统函数 (系统本身就写好的 你只需要调用 console.log() 属于全局窗口的 window)
内置函数 (对象内部提供的 Math.pow )
自定义函数 (由自己定义的函数)
函数的定义
使用function关键来定义
定义的方式有三种
匿名函数 (没有名字的函数 无法被复用的)
//自执行函数 自己执行 准备工作的执行(框架的封装)
// 前面() 表示他是一个整体 后面() 表示执行这个函数
(function () {
console.log('我是自执行函数')
})()
具名函数 (有名字的函数 必须调用才会执行 具备复用性)
/*
function 函数名(形参...){
函数体
}
*/
//具名函数
function sayHello(){
console.log('hello')
}
//调用 函数名()
sayHello()
//结合匿名函数来声明具名函数
var sayHi = function(){
console.log('hi')
}
sayHi()
使用对象构建的形式 (new关键来构建)
// new Function('函数体')
var fn = new Function('console.log("你好")')
fn()
函数的执行过程
预编译过程
var关键修饰的变量会预编译
console.log(a) //undefined
var a = 10
console.log(a) //10
function 也会发生预编译
fn() //也能执行 function会被预编译
function fn() {
console.log('测试')
}
console.log(fn1)//undefined
fn1()//var关键词预编译不会读取赋值操作 报错 is not a function
//第二种具名函数的定义
var fn1 = function(){
console.log('test')
}
执行过程
函数声明会发生预编译 调用的时候会发生什么操作
他会去寻找对应的堆空间的函数引用
然后再将他推入执行栈中 进行执行
在执行栈中会打开对应的函数内的代码进行执行
当他执行完毕以后 那么gc就会将他回收(可达性)。
回收过程
gc是一个垃圾回收机制 (用于回收当前没有被使用的变量)
函数的参数
没有实际的参数叫形参 用于定义 (随便写)
有实际值得参数叫实参 用于传递
示例
求和 传入俩个数值求他们之间的和
//a b为形参
function sum(a,b){
console.log(a+b)
}
sum(1,2) //1 2为实参
注意事项: js允许少传参 必须这个参数没有被使用到(没有函数的调用) 否则会出现错误
练习
传递一个数 判断是否回文
function isPalindrome(n) {
//判断当前是否为数值
if(isNaN(Number(n))){
//错误提示
// console.error('当前输入的内容出错')
//抛出一个新的错误 底下的内容不会被执行
throw new Error('当前输入的内容出错')
}
//个数为0不可能是回文数
if(n%10==0 && n!=0){
console.log('这个数不是回文数')
}else if (n < 10 && n >= 0) { //小于10 大于0的数为回文
console.log('当前数为回文数')
} else {
//需要将当前这个数进行反转
var x = n
var y = 0
//反转操作
while (x > y) {
y = y * 10 + x % 10
x = parseInt(x / 10)
}
//偶数情况下
if (x == y) {
console.log('当前数为回文数')
} else if (x == parseInt(y / 10)) {
console.log('当前数为回文数')
} else {
console.log('这个数不是回文数')
}
}
}
isPalindrome(prompt('输入数值进行判断'))
传入一个数判断是否是水仙花数
function isNarcissusNumber(number){
//判断当前是否为数值
if(isNaN(Number(n))){
//错误提示
// console.error('当前输入的内容出错')
//抛出一个新的错误 底下的内容不会被执行
throw new Error('当前输入的内容出错')
}
//验证
if(Math.pow(number%10,3)+Math.pow(parseInt(number/10%10),3)+Math.pow(parseInt(number/100),3)==number){
console.log('当前数为水仙花数')
}else{
console.log('当前数不是水仙花数')
}
}
isNarcissusNumber(prompt('输入数值进行判断'))
函数考虑其复用性的同时,必须要考虑多种情况的产生
return关键词
return 是用于在函数中返回对应的结果的,默认情况下函数return undefined。当return完那么对应的函数执行就结束了。
function fn(){
}
console.log(fn())//undefined
示例
输入俩个数返回他们的和
function sum(number1, number2) {
return number1 + number2
console.log('我是后面的代码')//不会被执行
}
var i = sum(1, 2)
console.log(i) //3
练习
输入俩个数返回他们的最小公倍数和最大公约数的和
function fn(x, y) {
//得到他的最小公倍数 和 最大公约数
//得到最大最小值
var max = Math.max(x,y)
var min = Math.min(x,y)
while (true) {
if (max % x == 0 && max % y == 0) {
//得到最小公倍数
break
}
max++
}
while (true) {
if (x % min == 0 && y % min == 0) {
//得到最小公倍数
break
}
min--
}
return max + min
}
总结
break 跳出循环和switch 不会结束function
continue 只能用于循环中 跳过本次循环 进入下次
return 结束整个函数 返回对应的数据 (放在最后)
throw new Error 结束整个程序