函数挪用拾遗

函数挪用总结

一般组成函数主题的JS代码在定义之时是不会被实行的,只要在挪用函数是才会被实行
有4种体式格局能够挪用JS函数

函数挪用

//定义函数 factorial
function factorial(){
    if(x <= 1) return 1;
    return x * factorial(x-1);
}
var probability = factorial(5)

以函数情势挪用的函数一般不实用this关键字

要领挪用

要领挪用和函数挪用区分在于:挪用上下文。
假如有一个 函数 f 和 对象 o
给o定义一个m()的要领

o.m = f

给对象o定义要领m(),挪用时就像如许

o.m()

个中o就成为挪用上下文,函数体能够运用关键字this援用该对象
一个详细的例子:

var calculator = {
    operand1 : 1;
    operand2 : 2;
    add : function(){
        this.result = this.operand1+this.operand2;
    }
};
calculator.add();//要领挪用1+1的效果
calculate.result // => 2

this关键字

关键字this和变量差别,没有作用域的限定,嵌套的函数不会从挪用他的函数中继续this
假如嵌套函数作为要领挪用,this值指向挪用它的对象。
假如嵌套函数作为函数挪用,this指向全局对象或undefined
很多人误认为挪用嵌套函数时this会指向挪用外层函数的上下文。
假如你想这个外部函数的this值时,需要将this值保留在一个变量里,这个变量和内部函数都在统一作用域内。

var o = {
    m:function(){ //对象中的m()要领
        var self = this;//保留this值
        console.log(this === o);//true,this就是这个对象o
        f(); //挪用辅佐函数f()
        
        function f(){
            console.log(this === o);//false,this的值是全局对象或undefined
            console.log(this === o);//true,self指外部函数的this值
        }
    }
};

组织函数挪用

组织函数挪用与函数挪用、要领挪用在实参处置惩罚,挪用上下文和返回值方面都有差别。

组织函数挪用在圆括号里包括实参列表,则先盘算实参表达式,这与函数挪用和要领挪用是一致的。
假如组织函数没有形参,JS组织函数挪用语法是能够省略()的

var o = new Object();
var o = new Object;//等价

组织函数挪用建立一个空对象,继续自组织函数prototype属性,组织函数试图初始这个新建立的对象,作为其挪用的上下文,因而,组织函数能够运用this来援用这个新建立的对象。
组织函数一般不运用return,当实行完函数体后,会显现返回。

间接挪用

JS函数也是对象,天然也有要领。
个中call(),apply()能够用来间接挪用函数。这两个要领都支撑显式挪用所需this值

var args = [girl1, girl2];
var animal = new Animal();
Man.prototype.fuck.apply(animal, args);

我们能够将call(),apply()看做某个对象的要领,经由过程挪用要领的情势来简介挪用。
call和apply的第一个实参是要挪用的函数的母对象,他是挪用上下文,在函数体内能够经由过程this来取得援用。

    原文作者:Sonnet
    原文地址: https://segmentfault.com/a/1190000004575192
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞