一、函数格式

1、函数可以通过声明来创建

function functionName(parameters){

       执行代码

}

2、函数也可以通过一个表达式定义存储在变量中

var fun = function(a,b){return a*b;}

二、函数可以自调用

如果表达是后面紧跟();,则会自我调用

(function () {
    var x = "Hello!!";      // 我将调用自己
})();

三、函数可以作为一个值或者一个表达式使用

function myfunction(a,b){

return a*b;

}

var x = myfunction(3,4);  //结果为12(作为变量)

 

function myfunction(a,b){

return a*b;

}

var x = myfunction(3,4) * 2;  //结果为24(作为表达式)

四、函数提升

使用表达式定义函数是无法提升(匿名函数)

五、函数是对象

函数也有属性和方法  例如:

function myfunction (a,b){

return arguments.length;  //返回函数在被调用过程中接收到的参数

}

又例如:

function myfunction (a,b){

return a*b;

}

var str = myfunction.toString();  //将函数作为字符串返回   结果为:function myFunction(a, b) { return a * b; }

六、函数参数(显示参数与隐示参数)

显示参数 parameters  在函数定义时给出

隐示参数 arguments    在函数调用时传递给函数真正的值

JS函数对隐示参数的个数与类型没有检测   定义显示参数时没有指定数据类型

七、Arguements对象

函数有个内置的arguments对象  它包含了函数调用的参数数组  相当于是函数接受的参数被全部放进一个数组arguments[ ]中

通过arguments.length可以简单地知道函数中究竟有多少个参数

八、函数调用

JS中一共有4种方法调用函数

每种方式的不同在于this的初始化

(1)作为一个函数调用

function myfunction(a,b){
    return a*b;
}
myfunction(6,7); 

以上函数不属于任何对象,在JS中默认为全局对象

在HTML中默认的全局对象是页面本身,所以函数是属于页面的

在浏览器中页面的对象是浏览器窗口(window对象),函数会自动变为window对象的函数

function myfunction(a,b){
    return a*b;
}
window.myfunction(6,7);  //返回42

当函数没有被自身对象调用时,this就会变成全局对象

而在浏览器中全局对象是窗口(window对象)

function myfunction( ){
    return this;
}
myfunction();   //返回window对象

(2)函数作为方法调用

var myObiect={
            firstName:"A",
            lastName:"B",
            fullName:function(){
                return this.firstName+this.lastName;
            }
        }
        myObiect.fullName();

fullName方法是一个函数,函数属于对象,myObject是函数的所有者,所以this的值为myObject对象

测试如下:

var myObiect={
            firstName:"A",
            lastName:"B",
            fullName:function(){
                return this;
            }
        }
        myObiect.fullName();

返回Object

(3)使用构造函数调用

如果函数使用了new,则是调用了构造函数

      function myfunction(arg1,arg2){   
this.firstName=arg1; this.lastName=arg2; }
var x=new myfunction("A","B"); x.firstName; //返回A

this创建了一个新对象

构造函数的调用会创建一个新对象,新对象继承了构造函数的属性和方法

(4)作为函数方法调用函数

在JS中函数是对象,函数有它的属性和方法

call() 与 apply()是预定义的函数方法,两个方法可以用于调用函数,两个函数的第一个参数必须是对象本身

function myfunction(a,b){
            return a*b;
        }
        var myObject=myfunction.call(myObject,6,7);
function myfunction(a,b){
            return a*b;
        }
        myArray=[6,7];
        var myObject=myfunction.apply(myObject,myArray);
        myObject;

call()方法与apply()方法相同的地方在于传入的第一个参数都必须是对象本身

不同的是,applay()方法会将参数作为一个数组传入,而call()方法直接将参数传入

在严格模式下,在调用函数时的第一个参数回座位this的值,即使该参数不是一个对象

在非严格模式下,如果第一个参数的值是null或undefined,它将会使用全局变量代替

this指的是调用函数的那个对象

posted on 2018-10-29 22:21  OHaYo  阅读(151)  评论(0编辑  收藏  举报