和JAVA一样用复制黏贴代码的方式不利于代码的复用,在JAVA中我们便用**函数(也叫方法)**解决问题
类似的,JS也有函数,JS的函数是一个对象
创建函数对象
var fun = new Function("代码封装在这里");
//创建函数对象
//封装代码以字符串的形式传给构造函数
函数中的代码会在调用时按顺序执行
这个例子很不简洁主要用于说明js的函数是一个对象
用函数声明创建函数
这是主要的函数创建方法
function fun2(){
console.log("我们通常这样构建函数");
//内部格式就和JAVA很像了
}
//----------------------------------------------------------
var fun3 = function(){
console.log("我们也可以这样构建函数");
}
简单理解为构建一个匿名函数给变量fun3,或者定义了一个指向匿名函数的指针(因为匿名函数不能直接调用)
立即执行
有时候我们只想让一个函数执行一次,我们可以用括号包裹这个匿名函数,括号后加一个括号写入参数
(function(a,b){
alert("立即执行函数");
})(11,22);
** 函数的返回值 **
和JAVA一样用结果可以用return ;返回(默认undefined),返回后的语句不会执行,能返回包括对象等在内任意形式
函数的参数
形参
作为弱类型语言js的形参更为简单,但同样的因为解析器不检查参数类型和数量,可能接受非法参数类型,如果你忘记参数顺序他也不会报错,但结果不正确。
语义化是一个方法更好的方法,是将参数封装。
functio sum(a,b){
alert(a+b);
}
sum(1,2); //结果为3,这是正常结果
sum(1,w1); //结果为1w1,自动变为字符串了
sum(1,2,333);//结果为3,他并不在意多出来的实参,并会自动丢弃
sum(1); //结果为NAN,因为实参不足的部分用自动用undefined填充
//-------------------------------------------------------------------
functio sayHello(a,b){
alert("我叫"+a"今年"+b"岁");
}
sayHello(八云紫,18);//我叫八云紫今年18岁
sayHello(18,八云紫);//我叫18今年八云紫岁
//如果你忘记参数顺序他也不会报错
对象和函数
为了解决参数过多忘记顺序的问题,我们可以将参数封装成对象后传入
function sayHello(o){
alert("我叫"+o.name "今年"+o.age"岁")
}
var obj={
name:"斯卡哈";
age:"18";
}
sayHello(obj);
同理我们还可以将函数作为参数传入,函数也可以成为对象的属性(此时我们称这个函数为调用对象的方法,函数和方法仅为不用位置的名称区别,本质上没有区别)
fun(play());//此处传入的是函数返回值
fun(play);//此处传入的是函数对象
var ojb = {
sayHello:function(){
alert("hello")
}//现在这个函数 叫方法
}
obj.sayHello();