關注小編 私信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 就是 23. 構造器模式(構造函數模式, 構造方法模式)
constructor
特點: 使用 new 關鍵字引導執行步驟:var p = new Person();new 是一個運算符, 專門用來申請創建對象, 創建出來的對象傳遞給構造函數的 this。然後利用構造函數對其初始化。執行完 new 進入構造函數時, p 對象的原型 就指向了 構造函數 Person
而 構造時,this 指的的是 p 對象,是通過對象動態添加屬性來構造的
小貼士:如果調用構造函數的時候, 構造函數沒有參數, 圓括號是可以省略的。
↑ 忽略了 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 就是函數調用如果是 對象就是 方法調用, 該對象就是宿主對象, 後面緊跟一個數組參數, 將函數所有的參數依次放在數組中.