函数
特点:用于封装反复执行的代码,是一个功能体
- 创建一个普通函数
function 函数名称(){
函数体;
}
函数名称(); //函数的调用
- 创建带有参数的函数
function 函数名称(参数列表){ //形参
函数体;
}
函数名称(参数列表); //实参
实参可以赋值给形参,参数的数量可以是多个或者没有,如果参数数量传递少了或者没有,则对应位置的参数值返回为undefined
- 创建带有返回值的函数
function 函数名称(参数列表){
函数体;
return 值; //函数调用所得到的结果
}
如果return后面有返回变量,则若想调用函数取得返回值,这就需要重新再函数外重新定义一个变量,return执行后就不再执行之后代码;
对比break和return关键字 |
break: 用于switch-case语句中或者循环语句中,作用是结束循环或者switch-case语句的执行 |
return : 用于功函数中,结束return之后语句的执行 |
变量的作用域
全局作用域 | 函数作用域 |
函数体外声明的变量,任何位置都可以访问 | 函数体内声明的变量,只有函数作用域可以访问 |
隐式全局变量:在函数中如果不加var声明的变量就是隐式全局变量,
注意:全局变量是不可以删除的,但是隐式全局变量可以删除;
下面是一些关于作用域的习题;
1.判断a,b,c分别输出什么
function fn(){
var a=b=c=2;
}
fn();
console.log(b);//隐式全局变量,可以访问
console.log(c);//隐式全局变量,可以访问
console.log(a);//局部变量,报错
2.判断fn输出的是什么
function fn(){
console.log(b);//undefined
var b=2;
}
涉及到变量的提升
3.对比以下两组函数分别输出的是什么
var c=3;//迷惑行为——不考虑
function fun(){
console.log(c);
//优先考虑当前作用域下的c
//如果当前作用域没有,再去考虑全局
var c=5;//变量提升
}
fun();//undefined
var c=3;
function fun(){
console.log(c);
//当前作用域没有会去上一级寻找
//没有声明,所以不能提升;
c=5;//给全局变量重新赋值为5
}
fun();//3
console.log(c);//访问的是全局的c 输出的是5
4.判断下列函数输出值是什么
function add(a,b){
//形参相当于局部变量,不能被外部访问
}
add(2,3);
console.log(a);//undefined
console.log(b);//undefined