开端熟悉函数

函数

观点:

函数包含一组语句,它们是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!");
    原文作者:zjhjszwx
    原文地址: https://segmentfault.com/a/1190000007236973
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞