1.函数
数学函数:
x,y 任意的x => 确定的y
其中x自变量
y = f(x) 函数值就是确定的,具有确定性
函数式编程:
- 一个固定的功能或者是程序段被封装的过程
- 实现一个固定的功能或者程序
- 在这个封装体中需要一个入口,一个出口
- 入口就是参数, 出口就是返回
function test(a, b,..){
// 执行语句
}
2.函数的基本写法
1.最基本的写法 => 函数声明
function test(参数) {
// 函数执行语句
}
函数的命名规则
- 不能以数字开头
- 可以字母_$开头
- 中间可以包含数字字母_$
- 小驼峰命名法 => myWonderfulTest
2.表达式 字面量方法
var test = function test1() {
var a = 1,
b = 2;
console.log(a, b);
}; // 注意这里是有分号的, 与任何变量初始化语句一样.
// test1(); ✖
// 调用使用 test()
匿名函数表达式 函数字面量
var test = function() { // 匿名函数
var a = 1,
b = 1;
console.log(a, b);
}
3.函数的组成部分
函数名(可选), 参数(可选), 返回值 (return), 函数执行语句
function 函数名(参数) {
// 执行语句
return 默认返回undefined
}
1.参数
1.1实参,形参
var aa = Number(window.prompt('a'));
var bb = Number(window.prompt('b'));
// a ,b => 形式上占位,形式参数 形参
function test(a, b) {
console.log(a + b);
}
// 实际参数 aa, bb
test(aa, bb);
1.2 形参和实参数量可以不相等
function test(a, b, c){
console.log(a, b, c);
}
test(1, 2); // 1, 2, undefined
test(1, 2, 3, 4); // 不会报错
2.arguments
实参传入值,函数内部时可以更改实参的值
实参没有传入值,函数内部不能更改
function test(a, b) {
console.log(test.length);
console.log(arguments.length);
}
// 1.arguments 长度根据传入的参数的个数决定
test(1, 2); // 2 2
test(1, 2, 3); // 2, 3
调用一个函数,累加他的实参值
function sum(){
var a = 0;
// arguments[i] 可以取到传入的实参的值
for(var i = 0; i < arguments.length; i++){
a += arguments[i];
}
}
3.return
return 之后函数后续不会执行
- 终止函数的执行
- 返回相应的值 ```javascript function test() { console.log(‘我正在执行’); return; console.log(‘我执行完了就结束这个函数’); }
console.log(test());
<a name="GuoXH"></a>
# 4.变量
<a name="S3uxH"></a>
## 全局变量
1. 在全局环境下所声明的变量,在任何地方都可以访问
1. 函数内部可以定义变量,如 b = 2, 此时的b就是一个全局变量,当函数调用之后,就会定义这个变量,使其能够在函数外部进行访问。
<a name="gDgH1"></a>
## 局部变量
在函数内部被声明的变量,只能在函数内部进行使用,函数外部无法进行访问,并且在函数执行之后,自动销毁。
```javascript
a = 1;
function test1() {
var b = 2; // 函数test1所声明的局部变量
console.log(a); // 打印出 1
function test2() {
var c = 3; // 函数test2所声明的局部变量
console.log(b); // 打印出 2
}
test2();
console.log(c); // 报错 因为c是函数test2 里面的局部变量,外部没有定义
}
test1();
5.作业
1、定义一个函数,从wp接受一个饮料的名称,函数返回对应的价格
var drink = window.prompt('选择一个你想要喝的饮料');
function priceDrink(drink){
switch(drink){
case '可乐':
return '5元'
case '怡宝':
return '2元'
case '茶派':
return '5元'
default:
return '没有您选择的饮料'
}
}
2、定义一个函数,wp接收第一个值,接收一个运算符号,接收第二个值,然后进行运算
var num1 = Number(window.prompt('请输入第一个数值'));
var operator = window.prompt('请输入运算符号');
var num2 = Number(window.prompt('请输入第二个数值'));
function computer(num1, operator, num2){
switch(operator){
case '+':
return num1 + num2
case '-':
return num1 - num2
case '*':
return num1 * num2
case '/':
return num1 / num2
case '%':
return num1 % num2
default:
return '请您检查输入的值'
}
}
3.定义一个函数,从wp接收一个n,算出n的阶乘 (不能用for)
var n = window.prompt('请输入您要算出几的阶乘');
// 运用递归的算法
function factorial(n) {
// 出口
if(n === 1){
return 1
}
return n * factorial(n - 1);
}
factorial(5)
4.定义一个函数,从wp接收一个n,算出斐波那契数列的第n位,不能用for循环.
var n = Number(window.prompt('请你输入你想算出第几位的斐波那契数列'));
function fabonacci(n) {
if( n <= 2){
return 1
}
return fabonacci(n - 1) + fabonacci(n - 2)
}
console.log(fabonacci(n));