Appearance
function 数据类型
函数数据类型也要按照引用地址来操作的
函数:具备一定功能的方法
javascript
// => 创建函数:
function 函数名(){
//=> 函数体:实现某一个功能的具体JS代码
}
// => 执行函数:相当于使用洗衣机洗衣服(如果函数只创建了,但是没有去执行,函数没有任何的意义)
// 函数名()
1
2
3
4
5
6
2
3
4
5
6
javascript
function fn(){
console.log(1+1);
}
fn; // => 输出函数本身
fn(); // => 把函数执行(吧函数体重实现功能的代码执行)
1
2
3
4
5
2
3
4
5
形参:形式参数(变量),函数的入口
当我们创建一个函数想要实现个功能的时候,发现有一些材料不清楚,只有当函数运行的时候,别人传递给我,我才知道,此时我们就需要设定入口,让用户执行的时候通过入口把值把我们
javascript
function fn(num1,num2){
console.log(num1+num2)
}
// 实参:函数执行传递给函数的具体值就是实参
fn(1,2);
fn(10,20);
1
2
3
4
5
6
2
3
4
5
6
函数中形参和实参
- 形参:相当于生成洗衣机的时候提供的入口,需要用户执行函数的时候把需要的值传递进来,形参是个变量,用来春初和接口那些值
- 实参:用户执行的时候传递给形参的具体指
javascript
// 随便求出两个数的和
function sum(num1,num2){ //num1/num2就是形参变量(类似于var了一下)
var total = num1 + num2;
total*=10;
total=total.toFixed(2);
console.log(total);
}
sum(10,20);//10/20是实参 num1=10 num2=20
sum(10); // num1=10 num2=undefined 定义了形参但是执行的时候,没有传递实参,默认实参就是undefined
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
arguments 实参集合
当我们不知道用户具体要传递几个值的时候(传递几个值都行),此时我们无法设置形参的个数:遇到此类需要,需要使用函数内置的实参集合:arguments
- argument 只有函数才有
- 不管执行函数的时候是否传递实参,arguments 天生就纯在,没有传递实参 ARG 是个空的集合传递了 ARG 中包含了所有传递的实参值
- 不管是否设置了形参,ARG 中始终存储了所有的实参信息
javascript
function sum(){
console.log(arguments)
}
sum(10,20,'wjh',{name:'wjw'});
1
2
3
4
2
3
4
- arguments 是个类数组集合
- 以数字作为索引(属性名),从 0 开始
- arguments[0] 第一个实参信息
- arguments[2] 第三个实参信息
- arguments[n] 第 n+1 个实参信息
- 有一个 length 的属性,存储的是当前几个的长度(当前传递实参的个数)
- arguments.length
- arguments['length']
- arguments.calle 存储的是当前函数本身
- arguments.calle.caller 存储的是当前函数只在哪执行的(宿主函数),在全局作用域下执行的,结果是 null
javascript
function sum(){
console.log(arguments.callee.caller);//f
}
function fn(){
sum(10,20,'wjh',{name:'wjw'});
}
fn();
1
2
3
4
5
6
7
2
3
4
5
6
7
// arguments.call 或者 arguments.call.caller 一般真正项目中很少使用,因为是在严格 js 模式下不允许我们直接使用这两个属性,然而现有项目大部分都是基于严格模式来的
javascript
// 任意数求和
function sum(){
var total = null;
for(var i =0;i<arguments.length;i++){
var cur = Number(arguments[i]);
!isNaN(cur)?total += cur : null
}
consloe.log(total);
return total;
// return 后面跟着的都是值(返回的都是值):此处不少TOTAL变量返回,而是吧total存储到值返回而已
// return 60;
}
sum(10,20,20);
sum();
sum(10,20,30,'wjw')
// console.log(total);
//=>Uncaught ReferenceError: total is not defined 闭包的保护机制导致作用域会保护里面的私有变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
JS 中的返回值 return
返回值是函数提供的一个出口:我们如果想在外面使用函数私有的一些信息,那么就需要通过 return,把这些信息返回出来供外面使用
sum: 代表的是函数本身
sum() 让函数先执行,代表的是当前函数返回的结果 (return) 后面是啥,相当于函数返回的是啥
javascript
function sum(){
var total = 0;
renturn
}
console.log(sum());
// 如果函数中没有return或者return后面啥也没有,默认返回的结果是undefined
1
2
3
4
5
6
2
3
4
5
6
javascript
function sum(){
var total = 0;
renturn;
console.log(sum());
// 函数体重遇到return后,return后面的代码都不在执行了
}
1
2
3
4
5
6
2
3
4
5
6
JS 中匿名函数
没有名字的函数
- 函数表达式
- 自执行函数
javascript
oBox.onclick = function(){
// 把一个码云名字的函数(有名字的也无所谓)作为值赋值给一个变量或者一个元素的某一个事件等,函数表达式
}
1
2
3
4
2
3
4
javascript
(function(n){
// 创建函数和执行函数放在一起,穿件完成立马之执行:自执行函数
// n 形参 n=10
})(10)
// 以下都是自执行函数,符号只有控制语法规范
~function(){}(10)
-function(){}(10)
+function(){}(10)
!function(){}(10)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10