函数是一个复杂数据类型。可以将重复使用的代码进行封装,实现代码的复用。
使用function关键字声明一个函数。
语法格式:
function 函数名() {}
function foo() {// 代码
}
// function 声明函数的关键字,表示接下来是一个函数
// foo 函数名(自己定义名字)
// () 用来传参数的位置
// {} 写代码的位置
在使用函数的时候,必须要调用才可以。
调用语法格式:
函数名()
所谓的函数调用就是让函数大括号中的代码执行。
函数的参数:
参数的本质就是一个变量,它位于函数小括号
语法格式:
function 函数名(参数1,参数2,…参数n){}
形式参数
形式参数可以设置默认值,语法格式:
function 函数名(参数1 = 默认值1,参数2 = 默认值2){}
函数的返回值(执行结果)
函数默认情况下执行结果为:undefined。
除非在函数内部使用return才可以改变计算结果(返回值),return后面跟什么内容,结果就是什么内容。
举例说明:
function foo() {return [1,2,3]
}
// return一次只能有一个结果
return包含两层含义
function foo() {var obj = '可乐'console.log('我是foo')}function foo1() { console.log('我是foo1')}
var foo2 = function() {consloe.log('我是foo2')
}
- 声明式可以先调用再定义。
- 赋值式先定义再调用。
foo()
foo1()
foo2()
求两个数的和:
function obj( ) {let x = 5;let y = 5;let z = x + y;console.log(z)}
obj()
函数的参数其实就是一个变量,写在函数的()中。
语法格式为:
function 函数名(参数1,参数2,参数n…) { }
1.语法格式为:function 函数名(参数1,参数2,参数n...) { }// 如果一个变量没有被赋值,那么这个值就是 undefind
function arr(x, y) {console.log(x, y);}
arr() // undefind undefind// 2.在调用函数的时候为参数进行赋值function arr(x, y) {console.log(x, y);let z = x + y;console.log(z);}arr(5,10) // 15
arr(2,30) // 32
- 实参:实际的参数
- 形参:形式的参数
- 定义函数时,小括号中的参数叫形参,调用函数时小括号中的叫实参。
function arr(x, y) { // 形参console.log(x, y);let z = x + y;console.log(z);}arr(5,10) // 实参
用户输入两个数字:
let x = +promp('请输入一个数字:')let y = +promp('请再输入一个数字:')
通过函数计算求和
function arr(a, b) {let z = a + b;console.log(c)
}
函数的调用
arr(x, y)
let num = [10, 21, 54, 23, 98, 12]function obj() {let s = 0;for(let i = 0; i < num.length; i++) {s += number[i]}
}
obj()
let num = [10, 21, 54, 23, 98, 12]
let num1 = [17, 21, 34, 21, 96, 14]function obj(arr) {let s = 0;for(let i = 0; i < arr.length; i++) {s += arr[i]}console.log(s)
}
obj(num)
obj(num1)
参数:任意的时候就会用到参数
参数是一个变量,在没有赋值的时候可以给它一个默认值。
不严谨的写法:
function arr(name) {console.log('你好' + name)
}
arr('黄昏') // 你好黄昏
// 如果一个变量只声明了,但是没有赋值,那么他的值就是undefined
arr() // 你好undefined
严谨的写法:
使用参数的默认值是为了让函数的逻辑更严谨
function arr(name = '黄昏终结者') {console.log('你好' + name)
}
arr('黄昏') // 你好黄昏
arr() // 你好黄昏终结者
语法格式:
function 函数名(参数 = 默认值) {}
函数支持中英文练习:
function sayHello(name, lang = 'zh') {// lang自定义变量。如果他的值为zh表示用中文打招呼,如果为en就用英文打招呼if(lang === 'zh') {console.log('你好' + name)} else if(lang === 'en') {console.log('Hi~' + name)}
}
sayHello('黄昏','zh') // 你好黄昏
sayHello('boss','en') // Hi~bosssayHello('黄昏','en') // Hi~黄昏
sayHello('boss') // 你好boss
函数的返回值就是函数本身执行的【结果】,【结果】是一个值。
// 二元运算
let x = 5 + 5; // 10(结果)// 三元运算
let y = x > 5 ? '真' : '假'; // 真(结果)// 函数
// 一个函数的执行结果[默认]情况下为undefined
function obj() {console.log('一个函数')
}
let j = obj();
console.log(j); // undefined
// 改变函数的结果值需要用到函数的返回值,只需要在函数中使用return即可
function arr() {return 10;
}
let t = arr();
console.log(t); // 10
// 函数的return一次只能有1个返回值。如果需要返回多个值可以通过数组来实现。
function foo() {retun [1,2]
}
console.log(foo()); // [1,2]
分析之前用到的代码:
// 这是一个内置的函数,可以供开发者直接使用。
prompt('请输入一个数字:') // 实参let n = prompt('请输入一个数字:');
console.log(n); // 执行结果就是用户输入的值// 这是一个内置的函数,可以供开发者直接使用。
alert('这是一个警告')let s = alert('这是一个警告');
console.log(s); // 结果是undefined
函数中是否需要有return取决于函数自身的功能。
数组:[12,8,6,13,21,7,30]
需求:将6从数组中删除
可以用splice(下标,1)
let numbers = [12,8,6,13,21,7,30]
// 先找到6的下标(封装成函数)
function arr(obj,num){let index;// 遍历查找某个单元for(let i = 0; i < obj.length; i++){if(obj[i] === num){index = ibreak} else {index = -1}}// 将结果返回到函数外部return index
}
let key = arr(numbers,6)
// 调用splice将其删除
numbers.splice(key,1)
console.log(numbers)
函数中使用了return后,后面的代码就不再执行。
function foo() {console.log('会执行') // 输出return // 终止函数的执行console.log('测试') // 不会输出
}
foo()
return两个含义:
就是为了给函数添加一个返回值,那么后面需要跟一个值
单纯只是让函数停止执行,后面啥也不写。
function foo() {console.log('会执行') // 输出return 1 // 终止函数的执行console.log('测试') // 不会输出
}
foo()
练习:
(1)用户输入100以内的数字
let ages = [];
function set (age) {// 第一种实现方式// if(age > 0 && age <= 100) {// ages.push(age);// }// 第二种实现方式if(age < 0 || age > 100) {return;}ages.push(age);
}
(2)用户输入秒数,自动转换为时分秒
// 1小时是3600秒// 封装一个函数能够将秒数转换为[时分秒]显示
function format(seconds) {// 将[秒]转换为[小时],parseInt(秒数/3600)let h = parseInt(seconds / 3600)// 将[秒]转换为[分钟],parseInt((秒数%3600)/60)let i = parseInt((seconds % 3600) / 60)// 将总的[秒]数转换成秒,seconds%60let s = seconds % 60return `时间为{h}:{i}:{s}`
}
// 用户输入的秒数
let seconds = +prompt('请输入一个秒数:')
let str = format(seconds)
console.log(str)
上一篇:AVL树高度求解