摘要:如果嵌套函數(shù)作為函數(shù)調(diào)用,指向全局對象或。構(gòu)造函數(shù)調(diào)用在圓括號里包含實(shí)參列表,則先計算實(shí)參表達(dá)式,這與函數(shù)調(diào)用和方法調(diào)用是一致的。構(gòu)造函數(shù)通常不使用,當(dāng)執(zhí)行完函數(shù)體后,會顯示返回。其中可以用來間接調(diào)用函數(shù)。
函數(shù)調(diào)用總結(jié)
通常構(gòu)成函數(shù)主題的JS代碼在定義之時是不會被執(zhí)行的,只有在調(diào)用函數(shù)是才會被執(zhí)行
有4種方式可以調(diào)用JS函數(shù)
//定義函數(shù) factorial function factorial(){ if(x <= 1) return 1; return x * factorial(x-1); } var probability = factorial(5)
以函數(shù)形式調(diào)用的函數(shù)通常不適用this關(guān)鍵字
方法調(diào)用方法調(diào)用和函數(shù)調(diào)用區(qū)別在于:調(diào)用上下文。
如果有一個 函數(shù) f 和 對象 o
給o定義一個m()的方法
o.m = f
給對象o定義方法m(),調(diào)用時就像這樣
o.m()
其中o就成為調(diào)用上下文,函數(shù)體可以使用關(guān)鍵字this引用該對象
一個具體的例子:
var calculator = { operand1 : 1; operand2 : 2; add : function(){ this.result = this.operand1+this.operand2; } }; calculator.add();//方法調(diào)用1+1的結(jié)果 calculate.result // => 2this關(guān)鍵字
關(guān)鍵字this和變量不同,沒有作用域的限制,嵌套的函數(shù)不會從調(diào)用他的函數(shù)中繼承this
如果嵌套函數(shù)作為方法調(diào)用,this值指向調(diào)用它的對象。
如果嵌套函數(shù)作為函數(shù)調(diào)用,this指向全局對象或undefined。
很多人誤認(rèn)為調(diào)用嵌套函數(shù)時this會指向調(diào)用外層函數(shù)的上下文。
如果你想這個外部函數(shù)的this值時,需要將this值保存在一個變量里,這個變量和內(nèi)部函數(shù)都在同一作用域內(nèi)。
var o = { m:function(){ //對象中的m()方法 var self = this;//保存this值 console.log(this === o);//true,this就是這個對象o f(); //調(diào)用輔助函數(shù)f() function f(){ console.log(this === o);//false,this的值是全局對象或undefined console.log(this === o);//true,self指外部函數(shù)的this值 } } };構(gòu)造函數(shù)調(diào)用
構(gòu)造函數(shù)調(diào)用與函數(shù)調(diào)用、方法調(diào)用在實(shí)參處理,調(diào)用上下文和返回值方面都有不同。
構(gòu)造函數(shù)調(diào)用在圓括號里包含實(shí)參列表,則先計算實(shí)參表達(dá)式,這與函數(shù)調(diào)用和方法調(diào)用是一致的。
如果構(gòu)造函數(shù)沒有形參,JS構(gòu)造函數(shù)調(diào)用語法是可以省略()的
var o = new Object(); var o = new Object;//等價
構(gòu)造函數(shù)調(diào)用創(chuàng)建一個空對象,繼承自構(gòu)造函數(shù)prototype屬性,構(gòu)造函數(shù)試圖初始這個新創(chuàng)建的對象,作為其調(diào)用的上下文,因此,構(gòu)造函數(shù)可以使用this來引用這個新創(chuàng)建的對象。
構(gòu)造函數(shù)通常不使用return,當(dāng)執(zhí)行完函數(shù)體后,會顯示返回。
JS函數(shù)也是對象,自然也有方法。
其中call(),apply()可以用來間接調(diào)用函數(shù)。這兩個方法都支持顯式調(diào)用所需this值
var args = [girl1, girl2]; var animal = new Animal(); Man.prototype.fuck.apply(animal, args);
我們可以將call(),apply()看作某個對象的方法,通過調(diào)用方法的形式來簡介調(diào)用。
call和apply的第一個實(shí)參是要調(diào)用的函數(shù)的母對象,他是調(diào)用上下文,在函數(shù)體內(nèi)可以通過this來獲得引用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78855.html
摘要:如果嵌套函數(shù)作為函數(shù)調(diào)用,指向全局對象或。構(gòu)造函數(shù)調(diào)用在圓括號里包含實(shí)參列表,則先計算實(shí)參表達(dá)式,這與函數(shù)調(diào)用和方法調(diào)用是一致的。構(gòu)造函數(shù)通常不使用,當(dāng)執(zhí)行完函數(shù)體后,會顯示返回。其中可以用來間接調(diào)用函數(shù)。 函數(shù)調(diào)用總結(jié) 通常構(gòu)成函數(shù)主題的JS代碼在定義之時是不會被執(zhí)行的,只有在調(diào)用函數(shù)是才會被執(zhí)行有4種方式可以調(diào)用JS函數(shù) 函數(shù)調(diào)用 //定義函數(shù) factorial function...
閱讀 2686·2023-04-25 20:19
閱讀 1950·2021-11-24 09:38
閱讀 1639·2021-11-16 11:44
閱讀 4367·2021-09-02 15:40
閱讀 1355·2019-08-30 15:55
閱讀 2027·2019-08-30 15:52
閱讀 3767·2019-08-29 17:20
閱讀 2274·2019-08-29 13:48