首頁  >  文章  >  web前端  >  js函數的呼叫及有關隱式參數arguments和this的問題

js函數的呼叫及有關隱式參數arguments和this的問題

一个新手
一个新手原創
2017-09-28 09:21:401387瀏覽

##一、函數呼叫的幾種不同方式:

#1、作為一個函數呼叫

#2、作為一個方法進行調用,在物件上進行調用,支援物件導向程式設計

#3、作為建構器進行調用,建立一個新物件#4、透過apply()或call()方法進行調用,這種方式相對最複雜


##二、函數呼叫都會傳遞兩個隱式參數並存在於函數的作用域內:arguments和this

函數傳參和形參不一致如何處理:
#1、實參>形參--》超出部分實參不會分配

#2、實參<形參--》沒有對應的形參分配為undefined

##三、

#1、函數上下文:依賴函數的呼叫方式(四種呼叫方式)。

#2、arguments:所有參數的集合,並有length屬性,使用arguments[2]等取得;但arguments不是數組,沒有數組的那些方法


#3、this:引用了與該函數呼叫進行隱式關聯的一個對象,稱之為函數上下文

##四:

#1、「作為函數」呼叫:指上面四種的第一種方式,有別於其他三種
例如:function test(a,b){}/var test = function(a,b){}
此時的函數上下文是window,即**this==window**


#2、「作為方法」呼叫:當函數被賦值給一個對象,並使用引用該函數的這個屬性時
I、一個方法所屬的對像在該方法體內可以以this呼叫

var o = {};
o.test = function(){};
o.test();

此時的函數上下文是o這個對象,即**this==o**




##3、「作為建構器」呼叫:和函數宣告一樣,區別於如何呼叫函數,在函數呼叫前使用new關鍵字
function test(){return this};

new test();#########建構子的特別之處:#######I.建立一個新的空物件#######II.傳遞給建構器的物件是this對象,從而成為建構器的上下文#######III.如果沒有明確的回傳值,新建立的物件則作為建構器的回傳值進行傳回######
function Ninja(){
this.skulk = function(){return this};
//无显式返回,故返回this===o
}===function Ninja(){
var o = {};
o.skulk = function(){return this;};
return o;
}
var ninja1 = new Ninja();
var ninja2 = new Ninja();
ninja1.skulk === ninja1;
ninja2.skulk === ninja2;
# ######apply()和call()方法:明確的指定任何一個物件作為函數上下文###apply()需要兩個參數:1、作為函數上下文的物件2、作為函數參數所組成的陣列###call()也需要兩個參數:差異是第二個參數是一個參數列表########可以讓任何元素作為apply()和call()的上下文###

以上是js函數的呼叫及有關隱式參數arguments和this的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn