JS函数笔记

 

Function是一种引用类型,而某函数是Function引用类型的实例,有Function引用类型的固定的属性和方法。某函数名则为一个指向某函数对象的指针变量。因此,访问函数指针,则去掉函数名后面的括号,执行函数,则加上括号

定义函数的方式有两种:一种是函数声明,另一种就是函数表达式。

函数声明:

函数声明的语法:function functionName(arg0, arg1, arg2){

  //函数体

}

重要特征:函数声明提升(function declaration hoisting),意思是先读取函数声明,再执行代码,因此可以把函数声明放在调用它的语句后面。这是函数声明和函数表达式的唯一区别

函数表达式:(没有提升特征)

常见形式:

var functionName = function(arg0, arg1, arg2){

  //函数体

};

创建一个函数并将它赋值给变量functionName.因为function关键字后面没有标识符,所以创建的函数叫做匿名函数(anonymous function)。

如果同时使用函数表达式和函数声明,在Safari中会出错

函数是一个值的运用:将函数作为参数传递给另一个函数,将函数作为另一个函数的返回值返回

将函数对象的指针作为参数传递给另一个函数:

1.function callsomefunction(somefunction, someargument){

  return somefuntion(someargument);

}

2.function add10(num){return num+10;}

将函数2作为参数传递给函数1:

result = callsomefunction(add10, 10);//result = 20

将函数对象的指针作为另一个函数返回值返回:

如:

function createcomparisonfunction(propertyname){

  return function(object1, object2){

    var value1=object1[propertyname];

    var value2=object2[propertyname];

    if(value1 < value2){return -1;}

    else if(value1 > value2){return 1;}

    else{return 0;}

  };

}

使用这个函数来创建需要的函数:

var data = [{name:"youngcarolina", age:25}, {name:"oldercarolina", age:28}];

data.sort( createcomparisonfunction("name") );//创建以name排序的比较函数

alert(data[0].name);//oldercarolina

data.sort( createcomparisonfunction("age") );//创建以age排序的比较函数

alert(data[0].name);//youngcarolina

  }

}

函数对象内部的argument和this对象

argument对象:类数组对象,包含着传入函数中的所有参数,有callee属性,是一个指针,指向拥有这个argument对象的函数

this对象:this对象的值是函数据以执行的环境对象。

整个网页环境对象是window某对象的环境对象就是某对象名

如:

function nowcolor(){

  alert(this.color);

}

window.color = 'red';

var o = {'color':'blue'};

nowcolor();//red,nowcolor()的执行对象是window

o.nowcolor();//blue

函数对象的属性和方法:caller,length,prototype,apply(),call(),bind()

caller属性:值为调用当前函数的函数源码,在严格模式下只读

如:

function outer(){

  inner();

}

function inner(){

  alert(argument.callee.caller);//或inner.caller

}

outer();//outer的源代码

length属性:函数希望接受的命名参数的个数。

如:

function sum(num1, num2){return num1 + num2;}

alert(sum.length);//2

apply()和call()方法:可以设置函数体内this对象的值,实现在特定作用域内调用函数。唯一的区别是接受函数参数的方法不同

如:apply(o, [num1,num2] )或apply(this, arguments)

call(this, num1, num2)

bind()方法:创建一个把this值绑定到bind()得到的参数函数对象,ie8以下不支持

如:

function nowcolor(){

  alert(this.color);

}

var newnowcolor = nowcolor.bind(o);

newnowcolor();//blue

 

posted @ 2016-04-21 18:10  Carolina  阅读(115)  评论(0编辑  收藏  举报