函数挪用总结
一般组成函数主题的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来取得援用。