函数
观点:
函数包含一组语句,它们是javaScript基本模块单位,用于代码复用、信息隐蔽和组合挪用。用于指定对象的行动。
函数对象:
javascrtipt中的函数就是对象。对象是‘名/值’对的集兼并具有一个连到原型对象的隐蔽衔接。 对象字面量发生发生的对象衔接到Object.prototype。函数对象衔接到Function.prototype。每一个函数在建立时会附加两个属性,函数的上下文和函数完成的代码
函数定义
有三种体式格局能够定义函数
1. 运用函数声明语法·定义函数
function sum(sum1,sum2){
return num1+num2;
}
2. 运用函数表达式定义函数:
var sum = function(sum1, sum2){
return num1+num2;
}
3. 组织函数
function Person() {
this.name = 'a';
return;
}
函数参数:
当函数被挪用时,会获得一个“免费”分派的参数:argument数组。函数能够经由过程此参数接见一切它被挪用时通报给它的参数列表,包含那些没有被分派给函数声明时定义的形式参数。它只是一个类数组,具有一个Length属性,但没有数组的任何要领。
//能够不指定参数个数
function add(){
var sum = 0;
for(var i = 0, l = arguments.length; i < l; i++){
sum += arguments[i];
}
return sum;
}
add(1,2,3);//6
函数返回:
return能够用来使函数提早返回,假如没有指定,则返回undefined。
假如函数挪用时在前面加上new前缀,且返回值不是一个对象,则返回this(该新对象)。
函数挪用:
javaScript一共有4中挪用形式:要领挪用形式,函数挪用形式,组织器挪用形式和apply挪用形式。
挪用运算符是函数表达式后的一对圆括号。
要领挪用形式
当函数被保存为对象属性时,称他为一个要领。当一个要领被挪用时,this被绑定到该对象。
var myObject = {
value:0,
increment:function(inc){
this.value += typeof inc === 'number'?inc:1;
}
};
myObject.increment(2);
myObject.value//3
函数挪用形式
当函数并不是一个对象的属性时,就是看成函数挪用的
var sum = add(1,2);
组织器挪用形式
//建立一个名为Quo的组织函数。组织一个带有status的属性
var Quo = function(string){
this.status = string;
};
//给Quo的一切实例供应一个名为get_status的大众要领。
Quo.prototype.get_status = function(){
return this.status;
};
//构建一个Quo的实例
var myQuo = new Quo("confused");
document.writeln(myQuo.get_status());//confused
apply挪用形式
因为javaScript是一门函数式的面临对象编程言语,所以函数能够具有要领。
apply要领让我们构建一个参数数组通报给挪用函数。它许可我们挑选this值。apply要领吸收两个参数,第一个是要绑定给this的值,第二个是参数数组。
// 组织一个包含两个数字的数组,并把它们相加
var statusObject = {
status:'A-Ok'
};
var status = Quo.prototype.get_status.apply(statusObject);
匿名函数:
function(a){
return a;
}
用法;
将匿名函数作为参数通报给其他函数。如许吸收方函数就你应用我们所通报的函数来完成一些事变。(也就是回调函数)
定义某个匿名函数来实行某些一次性使命。(也就是自调函数)
回调函数:
把函数当做参数通报给其他函数
//add就是回调函数,假如add为匿名函数,就称它为匿名回调函数
function add(a,b){
return a() + b ();
}
function a(){
return 1;
}
function b(){
return 2;
}
add(a,b);//3
自调函数:
自行挪用的函数:
(function(){
alert('foo');
})()//第二对括号起到马上挪用的作用,同时也是通报参数的处所
优点:运用自调匿名函数不会发生任何全局变量。但也没法反复实行。比较合适实行一些一次性或初始化的使命。
function a(param){
function b(theinput){
return theinput*2;
}
return "The result is " + b(param);
}
a(2);//The result is 4
b(2);//b is not define
优点:
有助于确保全局名字空间的纯洁性
私有性:保留了本身的函数,不为外部应用程序所用
返回本身的函数:
函数一直有一个返回值,即使不是显现返回,它们会隐式返回一个undefined。也多是返回另一个函数。
function a(){
alert("A!");
return function(){
alert('B!');
}
}
a()();//能够直接加上括号实行
能重写本身的函数:
因为一个函数能够返回另一个函数,因而我们也能够用新的函数来掩盖旧的。
function a(){
alert("A!");
a = function(){
alert("B!");
};
}
如许一来,第一次挪用该函数时:
alert("A!")会被实行(能够看为一次性的操纵)
全局变量会被从新定义,被给予新的函数
假如再次被挪用将实行alert("B!");