JavaScript从零开始4
---------------------------------------------------------------------------------
一、函数
(1)函数的定义
在JavaScript中的定义函数,一般开头使用function表示定义一个函数,+函数名+(参数1,参数2,...)+{函数体}。
function add(x,y)
{
return x+y;
}
第二方法,在JavaScript中,函数也是对象的一种,所以可以定义一个对象,把一个匿名函数赋值给它。var add = function (x,y)
{
return x+y;
};//这里需要加分号
(2)函数的调用add(3,4);//返回7
add(3,4,5);//返回7,多传的参数没影响
add(3);//返回NaN,少传参数,计算不出number
针对参数的校验,避免传参时出错得到错误的返回,需要做一个判断function add(x,y)
{
if(typeof x !== 'number' || typeof y !== 'number')
throw 'Not a number';//如少传了参数,那么这个少传的参数为undefined, 也是!=='number'
return x+y;
}
另外,对于参数的管理JavaScript还有一个类似数组的arguments,即调用函数时,传进的参数会暂时保存在这个对象里,只可以在函数内使用。function showNum(x,y)
{
if(typeof x !== 'number' || typeof y !== 'number')
throw 'Not a number';
console.log('参数个数: '+ arguments.length +',No1: '+ arguments[0] +', No2: '+ arguments[1] +', No3: '+ arguments[2]);
}
showNum(1,2,3);//参数个数: 3,No1: 1, No2: 2, No3: 3
showNum(1,2);//参数个数: 2,No1: 1, No2: 2, No3: undefined
showNum('a',2,3,4);//Not a number
当传参数较多时,使用到数组,可以用...rest(函数的参数),apply(函数继承的方法)function sum(...rest)//ES6标准引入rest参数
{
var s=0;
for(var i=0; i<rest.length; i++)
s+= rest[i];
return s;
}
var args=[];
for (var i=1; i<=100; i++) {
args.push(i);
}
sum.apply(this,args);//5050
二、变量
变量分为全局变量和局部变量。
定义的全局变量都是window的属性,直接使用变量的名字和window点出来的属性是一样的,我们还可以通过window点来改变原有的全局变量。
局部变量需要注意var定义的局部变量在函数体内都是可以使用的,例如for中var定义的局部变量是函数中有效,而let定义的局部变量是块内有效。let(ES6引入)。
function a()
{
for(var i=0;i<3;i++)
{
}
i+=10;//不会报错
console.log(i);//13
}
function b()
{
for(let m=0;m<3;m++)
{
}
m+=10;//会报错 p is not defined
console.log(m);
}
三、常量
const常量ES6标准引入 const PI = 3.14;
四、解构赋值
解构赋值,通俗的讲就是对应位置的变量赋予对应位置的值的结构。
var [a,b] = [1,2,'a'];
console.log(a);//1
console.log(b);//2
console.log(c);//a
var [a,[b,c]] = [1,[2,'d']];
console.log(a);//1
console.log(b);//2
console.log(c);//d
rest, Set, Map, 字符串,对象。var [a,...b]=[1,2,3,4,5,6];
console.log(a);//1
console.log(b);//[2, 3, 4, 5, 6]
var [a,b,c]=new Set([1,'hello',3]);
console.log(a);//1
console.log(b);//hello
console.log(c);//3
var [name,age,id]=new Map([['name','lili'],['age',18],['id',11]]);//Map的键为字符串
console.log(name);//name,lili
var {name,age,id}={name:'lala',age:18,id:12};//注意对象是花括号
console.log(name);// lala