函數的四種調用方式,你掌握了幾種呢?

關注小編 私信01,獲取C/C++相關資料!因為有人私信小編說想看函數調用,小編就整理了一下,希望對你們有幫助!

函數的四種調用方式

函數有下列調用模式

函數調用模式方法調用模式構造器模式上下文模式

1. 函數調用 模式

要調用,就肯定要先定義,函數的定義方式:

聲明式: function fuc() {}表達式式: var func = function() {};Function: new Function( ‘參數’,…,’函數體’ );

單獨獨立調用的,就是函數調用模式,即 函數名( 參數 ),不能加任何其他的東西, 對象 o.fuc() 就不是了。

在函數調用模式中, this 表示全局對象 window

任何自調用函數都是函數模式。

2. 方法調用 模式 method

所謂方法調用,就是用對象的方法調用。方法是什麼,方法本身就是函數,但是,方法

不是單獨獨立的,而是要通過一個對象引導來調用。

就是說方法對象一定要有宿主對象

對象.方法(參數)

this表示引導方法的對象,就是指宿主對象

對比-函數調用模式:

方法調用模式是不是獨立的,需要宿主,而函數調用模式是獨立的方法調用模式方式:obj.fuc(); 函數調用模式方式: fuc();方法調用模式中,this指宿主。而函數調用模式中 this 指 全局對象window

美團的一道面試題

解析:

fn() 前面沒有引導對象,是函數調用模式, this是全局對象,輸出 10arguments[ 0 ](),arguments是一個偽數組對象, 這裡調用相當於通過數組的索引來調用.這裡引導對象即宿主就是 arguments對象。所以,執行時,this 就是指 arguments,由於傳了兩個參數,所以 輸出為 arguments.length 就是 2

3. 構造器模式(構造函數模式, 構造方法模式)

constructor

特點: 使用 new 關鍵字引導執行步驟:var p = new Person();new 是一個運算符, 專門用來申請創建對象, 創建出來的對象傳遞給構造函數的 this。然後利用構造函數對其初始化。

執行完 new 進入構造函數時, p 對象的原型 就指向了 構造函數 Person

而 構造時,this 指的的是 p 對象,是通過對象動態添加屬性來構造的

小貼士:如果調用構造函數的時候, 構造函數沒有參數, 圓括號是可以省略的。

↑ 不傳參,可以簡寫,不影響構造返回值不寫 return 語句, 那麼 構造函數
默認返回 this在構造函數 return 基本類型( return num, return 1223 ). 則忽略返回類型.在構造函數 return 引用類型, 那麼構造函數返回該引用類型數據, 而忽略 this

↑ 忽略了 123,返回 this 對象, 指向構建的實例

↑ 忽略了 this,返回 { ‘peter’: ‘nihao’ } 對象

構造函數結合性

如果構造函數沒有參數, 可以省略 圓括號var p = new Person;如果希望創建對象並直接調用其方法( new Person () ).sayHello()-> 可以省略調整結核性的圓括號 new Person().sayHello()-> 如果想要省略構造函數的圓括號, 就必須添加結核性的圓括號 (new Person).sayHello()

面試題

一道面試題,大家可以自己嘗試先做一下,再看下面的答案和解析

請問順序執行下面代碼,會怎樣 alert

預解析,簡化後的代碼,以及答案

全部解析就不放上來了,自己好好琢磨一下。

4. 上下文調用模式

就是 環境調用模式 => 在不同環境下的不同調用模式

簡單說就是統一一種格式, 可以實現 函數模式與方法模式

-> 語法(區分)

call 形式, 函數名.call( … )apply 形式, 函數名.apply( … )

這兩種形式功能完全一樣, 唯一不同的是參數的形式. 先學習 apply, 再來看 call 形式

apply方法的調用形式

存在上下文調用的目的就是為了實現方法借用,且不會汙染對象。

如果需要讓函數以函數的形式調用, 可以使用foo.apply( null ); // 上下文為 window如果希望他是方法調用模式, 注意需要提供一個宿主對象foo.apply( obj ); // 上下文 為 傳的 obj 對象

帶有參數的函數如何實現上下文調用?

使用 apply 進行調用, 如果函數是帶有參數的. apply 的第一個參數要麼是 null 要麼是對象

如果是 null 就是函數調用如果是 對象就是 方法調用, 該對象就是宿主對象, 後面緊跟一個數組參數, 將函數所有的參數依次放在數組中.