函數定義
函數語句定義
function(a,b){ return a+b; }
表達式定義
var add = function(a,b){return a+b};
//函數表達式可以包含名稱,這在遞歸時很有用 var f = function fact(x){ if(x<=1) {return 1; }else { return x*faxt(x-1); } }
以表達式方式定義的函數,函數的名稱是可選的。如果函數定義表達式包含名稱,函數的局部作用域將會包含一個綁定到函數對象的名稱,實際上,函數的名稱將成為函數內部的一個局部變量
函數命名規範
1.like_this第一個字符為小寫,當包含多個單詞時候,單詞以下劃線分割
2.likeThis第一個字符為小寫,當包含多個單詞時候,除第一個單詞以外的單詞首字母使用大學字母
3.內部函數或私有函數,通常以一條下劃線為前綴
注:函數聲明語句‘被提前到外部腳本或外部函數作用於頂部,所以可以被在它定義之前出現的代碼所調用
以表達式方式定義函數前必須把它賦值給一個變量。所以表達式方式定義的函數在定義之前是無法調用的
函數返回值
- return語句返回函數的值給調用者。
- return語句沒有,則它返回undefined
嵌套函數
- 嵌套函數可以訪問他們的函數的參數和變量
- 但是嵌套函數不能出現在循環、條件判斷,或者try/cache/finally/with語句中
函數調用
- 作為函數
- 作為方法
- 作為構造函數
- 通過他們的call和apply方法間接調用
作為函數調用
add(1,2)
根據ECMAScript3和非嚴格的ECMAScript5對函數調用的規定,調用上下文(this的值)是全局對象。然而在嚴格模式下,調用上下文則是undefined。
1 //定義一個函數且調用一個函數來確定當前腳本運行是否為嚴格模式 2 var strict = (function{return this;});
作為方法調用
var o = { m:1, n:2, add:function{ this.result = this.m+this.n; } }
方法調用和函數調用的一個重大區別。----調用上下文
- o.add add的調用上下文為o,即:this
- o.add 等同於o['add']
- 方法鏈:當方法並不需要返回值時候,最好直接返回this
- this為一個關鍵字,不是變量,也不是屬性名。JavaScript語法不允許給this賦值
- 和變量不同,關鍵字this沒有作用於的限制,嵌套的函數不會從調用它的函數中繼承this,如果想訪問外部函數的this,var self= this;保存在變量中
- 如果嵌套函數作為函數調用,其this的值指向調用它的對象。如果作為函數調用,this不是全局對象(非嚴格模式),就是undefined(嚴格模式)
構造函數調用
var o = new Object;
構造函數調用和普通函數調用以及方法調用在實參處理。調用上下文和返回值等方面都有不同。
凡是沒有形參的構造函數調用都可以省略圓括號。
var o = new Object; var o = new Object; //等價
構造函數調用創建一個新的空對象,這個對象繼承自構造函數的prototype屬性,這個函數試圖初始化這個新創建的對象,病將這個對象做為上下文,因此構造函數可以使用this關鍵字來引用這個新創建的對象。
- new o.m 調用的上下文並不是o.
- 構造函數並不使用return。如果構造函數顯示的使用return語句返回一個對象,那麼調用表達式的值就是這個對象。如果構造函數但並沒有返回值,或者返回一個原始值,那麼就會忽略返回值,同時使用新對象作為返回結果。
間接調用
- call
- appy
相關推薦
'初學雲計算需要注意什麼 多服務器批量如何操作'
" 初學雲計算需要注意什麼?多服務器批量如何操作?在雲計算運維人員的日常工作中,通常需要同時在多臺服務器上執行同樣的命令,如對比日誌、檢查服務等,這就需要從業人員具備服務器批量操作的能力。很多初學雲計算的人並不清楚如何使用Linux Shell在多服務器上批量操作,接下來千...
'萬能的C語言,也能像其他語言那樣定義帶“默認參數”的函數嗎?'
"使用C++開發過程序時,定義函數可以指定默認參數,例如 void fun(int x, int y=3); 在調用 fun() 時第二個參數可以不傳遞,此時 fun() 函數默認第二個參數等於 3,例如 f(1) 就相當於 f(1,3)。這是一個很好用的特性,那麼在C語言...
'既然C語言無所不能,那麼它也能定義帶“默認參數”的函數嗎?'
"使用C++開發過程序時,定義函數可以指定默認參數,例如 void fun(int x, int y=3); 在調用 fun() 時第二個參數可以不傳遞,此時 fun() 函數默認第二個參數等於 3,例如 f(1) 就相當於 f(1,3)。這是一個很好用的特性,那麼在C語言...
'注意,週末這十大重磅消息將直接影響9月開門紅行情,這票軍工牛'
"【上證大盤分析】 週五大盤在2907點高開,開盤後迅速拉昇最高上攻至2914點遇阻回落,早上的這種快速上攻要看是否有大金融帶隊,如果大塊頭都爬著沒反應,就要注意誘多嫌疑,果然指數在2908點壓力位附近震盪橫盤後開始跳水殺跌,由於週末消息面和9月1日美帝開始加稅等不確定因素...
'虛擬主機怎麼維護安全?虛擬主機維護有哪些注意?'
"虛擬主機怎麼維護安全?虛擬主機維護有哪些注意?虛擬主機是網站正常運行的基礎,主機的安全性對於用戶來說非常重要。在購買虛擬主機時,我們一定要認準正規知名品牌。並且在使用過程中,要注意以下事項。下面聚名網小編就為大家介紹一下虛擬主機安全怎麼維護和虛擬主機維護要注意什麼。虛擬主...
'初期學Java開發需要注意的3個問題,缺一不可'
"Java語言是典型的面向對象編程語言,自身有嚴格的語法限定,所以在學習的初期會面臨一定的困難,但是在突破初期的學習難點之後,後續的學習過程就會容易很多,所以Java語言也可以說是一門先難後易的編程語言。在學習Java編程的過程中,如果想獲得一個較好的學習效果,千鋒廣州J...
你知道手機網站建設要注意這些事項嗎
手機網站製作要簡化內容手機不像電腦,手機屏幕有限,在製作過程中,也近可能優化網站頁面的內容,儘量減少佔有的內存,文字儘量簡潔,圖片儘量少用,讓瀏覽者在進入...
JavaScript深入淺出:函數是一等公民是什麼意思呢?
摘要: 聽起來很炫酷的一等公民是啥?《JavaScript深入淺出》系列:JavaScript深入淺出第1課:箭頭函數中的this究竟是什麼鬼?JavaS...
我的世界:萌新必須注意6點 老玩家不會犯 第六個讓人告別遊戲
眾所周知,沙盒遊戲之所以受到大眾的歡迎,與其天馬行空的創造力和高度自由的遊戲性不無關係,而作為沙盒遊戲的集大成之作,《我的世界》更是在自由度上超越了不少同...
推薦中...