函数的参数
function add(a,b){//定义函数的时候,使用的参数叫形参----形式上的参数,没有实际的值
var a = 1;
var b = 2;
var c = a+b;
console.log(c);
}
add(3,4)//调用函数的时候,使用的参数叫实参----实际的参数,具体的值
复制代码
函数的嵌套
//求总和的函数
function add(a,b,c){
var sum =a+b+c;
return sum;
}
//求平均数的函数
function avg(a,b,c,num){
var s=add(a,b,c); //在一个函数中调用另一个函数
var a= s/num;
return a;
}
var a = avg(2,5,8,3);
console.log(a);
复制代码
变量的提升
1、浏览器在执行js代码之前有一个预解析;
2、先预解析再执行;
3、预解析就是找var和function的过程,找到以后,存到浏览器的仓库中,
4、执行js代码,执行的时候,没有声明过程,只有赋值的过程----从上到下从左到右读取代码
复制代码
常犯错误
console.log(a); // 因为变量a没有声名过,所以会报错
test(); // 函数未定义,所以报错
复制代码
变量预解析
console.log(a); // 因为变量a在执行之前进行了预解析,也就是已经放到内存中了,只是没有值,所以是undefined
var a = 1;
/* 预解析相当于下面的过程 */
var a; // 将变量的声名放到当前作用域的最前面
console.log(a);
a = 1;
复制代码
函数预解析
test(); // 结 果:123 代码在执行之前经过预解析,将函数的内容放到了内存了,所以在下面的定义函数也能调用执 行
function test(){ console.log(123);
/* 预解析过程如下: */
function test(){ // 将函数声名放到当前作用域的最前面
console.log(123);
}
test();
复制代码
案例
// 1.匿名函数赋值给变量
fn();
var fn = function(){
console.log(123); //报错,fn不是一个函数了
}
// 2.函数内部的变量预解析
function test(){
console.log(a);
var a = 10;
}
test(); //undefined
复制代码
总结
1.用var关键字声名的变量,将变量的声名提升到当前作用域的最前面,赋值不提升
2.自定义的函数整体提升到当前作用域的最前面
3.函数同名,后面的会覆盖前面的
4.变量和函数同名,函数优先提升
return返回值
function add(a,b,c){
var sum = a+b+c;
console.log(sum);
// return sum;
console.log(123);
}
add(3,4,5);
console.log(add(3,4,5)/3);
复制代码
function add(a,b,c){
var sum = a+b+c;
//console.log(sum);
return sum;
console.log(123);//没有执行
}
add(3,4,5);
console.log(add(3,4,5)/3);
复制代码
return的作用:
1、让函数返回一个结果(不输出);
2、终止函数中的代码执行