day04 - javascript中的函数(上)

1.函数的定义:

被封装好可重复执行的一段代码块
是代码中的工具-使用方便,可以重复利用,具备一定的功能

优点:

1.封装(打包多条语句)                
2.重用(反复使用,优化代码)                
3.可扩展(可变的设为参数)

2.函数的创建:

1.声明式:
function  函数名(){    
	代码段
}
2.赋值式:就是将一个函数赋值给一个变量
var 变量名 = function(){    
	代码段
}
创建完调用使用:    
	声明式——函数名();    
	赋值式——变量名();

3.函数的参数:

function add(a,b){ //小括号就是函数这个工具的入口 - 形参(形式上的参数)    			
	var c = a + b;    
	console.log(c); 
	}
add(3,4); // 实参(实际上的参数)
实参跟形参是数量相同的,一一对应的
原则上讲,函数的形参和实参不光是数量要对应,还应该是类型也要对应如果只传入一个参数,a有值,b就没有值了,没有值就是undefined
如果实参的数量比形参的数量多,不会报错,多余的实参在函数中就无法使用

函数中还有一个关键字arguments可以获取到所有的实参
通过arguments得到所有实参的数量 - arguments.length    	
	console.log(arguments.length);
通过arguments可以得到任何一个实参 - 通过序号 - arguments[序号]    
	console.log(arguments[序号]);

4.带返回值的函数:

语法:    
function 函数名(){        
	return 返回的结果    
}
将结果返回的关键字是return,这样可以将函数运算的结果返回给调用者带有返回值的函数,当调用函数的时候得到一个结果,这个结果可以参加运算,也可以进行赋值。
带有返回值的函数,当函数执行到return关键字的时候,函数就终止了,在return后面的代码不会运行。
return的作用:
1. 终止代码继续运行
2. 在函数中返回一个内容
eg:
// 定义一个让指定数字递增的函数
function increase(x){ // 带有参数的函数
	var y = x + 1;
	return y
}
// 让2递增,得到结果赋值给变量a
var a = increase(2);
document.write(a%2); // 3%2 = 1 
// 让5递增,得到结果赋值给变量b
var b = increase(5);
alert(b/2); // 6/2 = 3
// 让10递增,得到结果赋值给变量c
var c = increase(10);
console.log(c+a-b); // 11+3-6 = 8

5.匿名函数:

1.概念:
顾名思义,匿名函数就是没有名字的函数

2.定义:

语法:    
function(){
        代码段    
}
匿名函数也可以传递参数

3.调用:匿名函数的调用是在定义的时候就调用

语法:    
	(function(形参){        
		代码段    
	})(实参)
//在大括号后面加小括号就是调用
eg:
(function(a,b){    
	var c = a + b;    
	document.write(c);
})(1,2);

6.函数的嵌套:

函数的嵌套就是在函数中调用函数

// 求数组中所有元素的平均数
/*分析:    
	1.先求和
	2.再求平均数
*/
// 求和函数
function sum1(arr) {    
	var s = 0;    
	for(var i in arr){        
		s += arr[i];    
	}    
	return s;
}
// 求平均数函数
function avg1(arr) {    
	var sum = sum1(arr); // 在平均数函数内调用求和函数    
	var length = arr.length;    
	var a = sum/length;    
	return a;
}
// 调用
var arr = [1,6,9,7,2];
var avg = avg1(arr);
console.log(avg);

7.变量的声明提升:

预解析就是在代码中找变量和函数的定义,并提升到当前作用域的最上面(只提升声明,不提升赋值)
预解析分为变量的预解析和函数的预解析,也就是代码在执行之前先进行解析,将变量和函数的声名放在当前作用域的最前面。
1. 预解析js代码:
预解析的过程,就是查找代码中的var和function这两个关键字,找到以后,将变量和函数存到了一个地方,就叫仓库吧,并给他们赋一个初始值,变量的初始值为undefined,函数的初始值为代码段。
2. 开始按顺序一行一行解读代码:
解读代码的时候,仓库中的变量和函数的值会随着代码的解读而发生变化,也就是变量的赋值和函数的调用。

console.log(a); // 因为变量a没有声名过,所以会报错
test(); // 函数未定义,所以报错
// 1.变量预解析
console.log(a); // 因为变量a在执行之前进行了预解析,也就是已经放到内存中了,只是没有值,所以是undefined
var a = 1;

预解析相当于下面的过程
var a; // 将变量的声名放到当前作用域的最前面
console.log(a);
a = 1;
// 2.函数预解析
test(); // 结果:123 代码在执行之前经过预解析,将函数的内容放到了内存了,所以在下面的定义函数也能调用执行
function test(){    
	console.log(123);
	}

预解析相当于下面的过程
function test(){ // 将函数声名放到当前作用域的最前面    	
	console.log(123);
	}
test();

总结:

  1. 用var关键字声名的变量,将变量的声名提升到当前作用域的最前面,赋值不提升
  2. 自定义的函数整体提升到当前作用域的最前面
  3. 函数同名,后面的会覆盖前面的
  4. 变量和函数同名,函数优先提升
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值