函数
世上唯有贫穷可以不劳而获。
函数定义
JavaScript中使用关键字function定义函数
//function 定义函数关键字; max函数名称; a,b函数的参数;{……} 函数体 ;
function max(a,b){
if(a>b){
return a;
}
else{
return b;
}
}
注意: JavaScript 函数是执行到return处就执行完毕,后面的语句均不会执行。
JavaScript中函数也是一个对象,可以将其赋值给某个变量
var max=function(a,b){
if(a>b){
return a;
}
else{
return b;
}
};
函数调用
函数调用使用 函数名(参数列表)
//上面的两种函数定义方式,调用方式一致
var value=max(5,10) //调用上面的max函数
console.log(value); //10
注意: 传入的参数类型与函数参数类型不匹配的话会返回undefined NaN等值
arguments
JavaScript中自带的关键字,每个函数内均有,存储的是调用该函数时传入的所有参数。
function max(a,b){
console.log('a='+a+' b='+b);
for (var i=0; i<arguments.length; i++) {
console.log('arg ' + i + ' = ' + arguments[i]);
// arg 0 = 10, arg 1 = 20……
}
};
max(10,20,30,40,50);
注意: JavaScript函数在调用时传入的参数数量和定义不一致不会报错
rest参数
ES6中新增rest参数,用于获取函数调用时多给的参数
//rest参数将调用时除a b以外的参数放到一个数组中
function max(a,b,...rest){
console.log('a='+a+' b='+b);
console.log(rest);
};
max(10,20,30,40,50);
//a=10 b=20
//[30, 40, 50]
变量作用域
var 定义的变量只能在作用域内访问
//不在任何函数内的变量 作用域在其声明语句后面
var y=5;//和 y=5 等效
//在函数体内定义的变量只能在函数内使用
function fun() {
var x = 1;
console.log('fun:y='+y);
}
//console.log(x) //报错 x未定义 Uncaught ReferenceError: x is not defined
fun(); //fun:y=5
console.log(y); //5
JavaScript存在函数嵌套,此时,内部函数可以访问外部函数的变量,反之不成立
function fun(){
var x = 1;
function innerFun(){
var y = 2;
console.log(x); //1
}
innerFun();
//console.log(y) //报错 y未定义
};
fun();
注意: JavaScript中变量的优先级是由内到外的,即内函数会覆盖外函数的重名变量,依次类推;
全局作用域
拥有全局作用域的变量叫做全局变量;全局作用域的所有变量都会变成window的属性
//定义全局变量的三种方式
var a=1; //var定义变量且不在任何函数中
b=2; //不使用var关键字定义的变量
window.c=3; //直接定义为window的属性
//调用全局变量,全局函数也可以类似调用
console.log(b); //2
console.log(window.b); //2
名字空间
JavaScript中所有的全局变量、函数都会绑定到同一个window上,使用多了容易遭成命名冲突;解决办法就是将自己使用的变量函数等放到一个名字空间中。
//定义全局变量 名字空间
var mySpace={
};
//将变量函数等绑定到自己的名字空间
//只是将以前隐藏了的window换成自己定义的变量
mySpace.name='namespace';
mySpace.fun=function(){
console.log('mySpace fun');
}
局部作用域
ES6中新增关键字let,let补充了JavaScript块级作用域的空白
function fun() {
//var
for (var i=0; i<10; i++) {
}
console.log(i);//在for循环外能访问到 10
//let
for (let j=0; j<10; j++) {
}
//console.log(j);//报错 j的作用域就在for循环内
}
fun();
常量
ES6新增关键字const来定义常量,const也具有块级作用域
const MAX=1000000;
//MAX=999999;//报错
console.log(MAX);//1000000
//无法修改常量的值
解析赋值
ES6新增解析赋值,即同时向多个变量赋值
var [a,b,c]=[10</