JS函數--Function

<strong>一.通過關鍵字 function 定義</strong>
1.函數可以通過聲明定義,也可以是一個表達式。
1)聲明:
function functionName(parameters) {
執行的代碼
}
注意:
a.由于函數聲明不是一個可執行語句,所以不以分號結束。
2)表達式:
函數表達式可以存儲在變量中:
var x = function (a, b) {return a * b};
在函數表達式存儲在變量后,變量也可作為一個函數使用:
var z = x(4, 3);
注意:
a.以上函數實際上是一個 匿名函數 (函數沒有名稱)。
b.函數存儲在變量中,不需要函數名稱,通常通過變量名來調用。
c.上述函數以分號結尾,因為它是一個執行語句。

<strong>二.通過內置的 JavaScript 函數構造器(Function())定義</strong>
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
等價于:
var myFunction = function (a, b) {return a * b}
var x = myFunction(4, 3);
注意:
在 JavaScript 中,很多時候,你需要避免使用 new 關鍵字。

<strong>三.函數提升(Hoisting)</strong>
提升(Hoisting)應用在變量的聲明與函數的聲明。使變量和函數可以在聲明之前調用。
注意:
聲明方式的函數可以提升,使用表達式定義函數時無法提升。

<strong>四.自調用函數</strong>
(function () {
var x = "Hello!!";
})();
或:
(function(){
var x = "World!!";
}());
注意:
a.想避免因少寫一個分號而拋出TypeError: undefined is not a function異常,那么就像下面的那樣寫吧!
;(function(){
console.log('HI');
}());
b.以上函數實際上是一個 匿名自我調用的函數 (沒有函數名)。
c首先要牢記一條規則:括號會馬上執行其前面的表達式。
var i=function (a,b){
return a+b;
}(1,2);
alert(i);

<strong>五.函數是對象</strong>
1.在JavaScript解釋執行的時候,實際上每個函數都是被維護為一個對象,即函數對象(Function Object)。

2.函數對象與其它用戶所定義的對象有著本質的區別,這一類對象被稱之為內部對象,例如日期對象(Date)、數組對象(Array)、字符串對象(String)都是屬于內部對象。換句話說,這些內置對象的構造器是由JavaScript本身所定義的:通過執行new Array()這樣的語句返回一個對象,JavaScript 內部有一套機制來初始化返回的對象,而不是由用戶來指定對象的構造方式。

3.在 JavaScript中,函數對象對應的類型是Function,正如數組對象對應的類型是Array,日期對象對應的類型是Date一樣,可以通過new Function()來創建一個函數對象,也可以通過function關鍵字來創建一個對象。

4.為了便于理解,將函數對象的創建和數組對象的創建來比較。先看數組對象:下面兩行代碼的作用是一樣的,都是創建一個數組對象:
var myArray=[];
等價于
var myArray=new Array();
同樣,下面的兩段代碼也是等價的,都是創建一個函數:
function myFunction(a,b){
return a+b;
}
等價于
var myFunction=new Function("a","b","return a+b");

<strong>六.函數參數</strong>
1.顯示參數Parameters
函數顯式參數在函數定義時列出。
functionName(parameter1, parameter2, parameter3) {
// 要執行的代碼……
}
2.隱式參數Arguments
函數隱式參數在函數調用時傳遞給函數真正的值。
function funTest(a,b){
for(var i in argument){
console.log(argument[i]);
}
}
funTest(1,2,3,'4','5',true,6);//前兩個是顯示參數,其他都是隱式參數
3.理解說明:
javascript函數的參數與大多數其他語言的函數的參數有所不同。函數不介意傳遞進來多少個參數,也不在乎傳進來的參數是什么數據類型,甚至可以不傳參數。

<strong>七.函數調用</strong>
1.函數作為一個函數調用
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // 直接調用函數,返回20;
注意:
a.在瀏覽器中的頁面對象是瀏覽器窗口(window 對象)。以上函數會自動變為 window 對象的函數。myFunction() 和 window.myFunction() 是一樣的:
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2);//這是調用 JavaScript 函數常用的方法, 但不是良好的編程習慣,全局變量,方法或函數容易造成命名沖突的bug。
b.函數作為全局對象調用,會使 this 的值成為全局對象。使用 window 對象作為一個變量容易造成程序崩潰。
function myFunction() {
return this;
}
myFunction(); //f返回是"[object Window]"

2.函數作為一個方法調用
在 JavaScript 中你可以將函數定義為對象的方法。
以下實例創建了一個對象 (myObject), 對象有兩個屬性 (firstName 和 lastName), 及一個方法 (fullName):
var myObject = {
firstName:"W",
lastName: "ZL",
fullName: function () {
return this.firstName + " " + this.lastName;
},
other: function(){
return this;
}
}
myObject.fullName(); // 返回"WZL"
myObject.other(); // 返回"[object Object]"
注意:
a.fullName 方法是一個函數。函數屬于對象。
b.this對象,擁有 JavaScript 代碼。實例中 this 的值為 myObject 對象。
3.使用構造函數調用函數 // 略掉
4.使用函數方法調用函數
在 JavaScript 中, 函數是對象。JavaScript 函數有它的屬性和方法。
call() 和 apply() 是預定義的函數方法。 兩個方法可用于調用函數,兩個方法的第一個參數必須是對象本身。
實例:
var myObject;
var myArray = [10,2];
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2);
myObject = myFunction.apply(myObject, myArray);

<strong>八.函數閉包</strong>
1.JavaScript 變量可以是局部變量或全局變量。私有變量可以用到閉包。
2.在web頁面中全局變量屬于 window 對象。
3.變量聲明時如果不使用 var 關鍵字,那么它就是一個全局變量,即便它在函數內定義。
4.內嵌函數
5.函數閉包
var add = (function () {
var counter = 0;
return function() {return counter += 1;}
})();

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,805評論 2 17
  • 原文: https://github.com/ecomfe/spec/blob/master/javascript...
    zock閱讀 3,391評論 2 36
  • 《ijs》速成開發手冊3.0 官方用戶交流:iApp開發交流(1) 239547050iApp開發交流(2) 10...
    葉染柒丶閱讀 5,270評論 0 7
  • js函數對象 轉載文章 函數是進行模塊化程序設計的基礎,編寫復雜的Ajax應用程序,必須對函數有更深入的了解。 J...
    猩崽大叔閱讀 992評論 0 0
  • 開業第四天,中餐廳迎來了薇姐、曉明哥和周冬雨的老師崔新琴——北京電影學院教授。 崔老師一來就干起了活,首先亮相的便...
    丫頭yuer閱讀 743評論 3 2