函数
函数式编程
function test(){
//执行语句
}
- 高内聚->低耦合->模块单一责任制
- 函数可以解耦 ```javascript if(3>1){ test() }
if(2>1){ test() }
if(5>1){ test() }
function test(){ for(var i=0;i<10;i++){ console.log(i); } }
<a name="v2hzB"></a>
### 函数写法
<a name="7clYp"></a>
#### 函数声明
```javascript
function test(参数){
//函数执行语句
}
- 函数命名规则
- 不能以数字开头
- 字母.下划线 美元符号开头
- 内不可以包含数字
- 驼峰式命名
- 表达式 字面量
var a = '10'//'10'就是字面量
var test = function test1(){
var a = 1;
console.log(a);
//test1(a++);
//test1可以在函数内部使用。在函数外不可见 递归时候可以使用
}
- 表达式 字面量
匿名函数表达式 函数字面量
- 匿名函数就是函数字面量
var a= function(x){console.log(x)}//
var test = function(){
var a = 1;
console.log(a);
}
- 匿名函数就是函数字面量
形参和实参 ```javascript var aa = Number(window.prompt(‘a’)); var bb = Number(window.prompt(‘b’));
function test(a,b){ //a,b是占位 形式占位 形参 console.log(a,b); }
<a name="eWkTJ"></a>
#### 例子
- 实参求和
```javascript
function sum(){
var total = 0;
for(var i = 0;i<arguments.length;i++){
total += arguments[i];
}
console.log(total);
//return total
}
sum(1,2,3,4,5,6,7);
- arguments
- 函数内部可以修改实参的值;
- 实参如果没传值,但是函数里面形参改了,arguments[x] x代表未传值的实参。 undefined ```javascript function test(a,b){ a = 2; b = 3; console.log(a,b);//2,3 console.log(arguments[1])//undfined //实参没有传入的形参,则这个形参在函数内部无法赋值; } test(1)
function test(a,b){ b = 3; console.log(b);//3 } test(1);
- 形参是存在栈内存中,实参是存在堆内存中。
<a name="YyMMO"></a>
### 函数返回值
- 返回之后这个函数就结束了了。
- 返回相应的值。
```javascript
function test(){
return ;//默认返回undefined
}
全局变量,局部变量[[scope]]
- 外部不能获取到内部的值
- 内部可以获取到内部的值
var a = 1;
function test1(){
console.log(a);//a=1;
var b = 2;
function test2(){
console.log(b);//b=2;内部可以获取到外部的值
var c =3;
console.log(c);
}
console.log(c)//c is not defined
test2();
}
作用域 ```javascript function test1(){ var a = 1; console.log(a) }
function test2(){ var b = 2; console.log(a);// reference error a is not defined } test1(); test2();
作业
- 定义个函数。从wp接受一个饮料名称,返回对应价格;
- 定义个函数。 从wp接受一个数,接受一个运算符 接收第二个数用这个函数运算。返回运算结果
- 定义个函数。 从wp接收一个数 算出他的阶乘 不能有for 循环;
- 定义个函数, 从wp接受一个数 算出斐波那契数列第n个 不能用for循环。
```javascript
//作业三
function getMulti(n,mul) {
var mul = mul||1;
if (n == 1) {
return mul;
}
mul *= n;
n--;
return getMulti(n,mul);
}
console.log(getMulti(3));