函數(shù)定義
函數(shù)語句定義
function(a,b){ return a+b; }表達式定義
var add = function(a,b){return a+b};//函數(shù)表達式可以包含名稱,這在遞歸時很有用 var f = function fact(x){ if(x<=1) {return 1; }else { return x*faxt(x-1); } }
以表達式方式定義的函數(shù),函數(shù)的名稱是可選的。如果函數(shù)定義表達式包含名稱,函數(shù)的局部作用域?qū)粋€綁定到函數(shù)對象的名稱,實際上,函數(shù)的名稱將成為函數(shù)內(nèi)部的一個局部變量
函數(shù)命名規(guī)范
1.like_this()第一個字符為小寫,當包含多個單詞時候,單詞以下劃線分割
2.likeThis()第一個字符為小寫,當包含多個單詞時候,除第一個單詞以外的單詞首字母使用大學字母
3.內(nèi)部函數(shù)或私有函數(shù),通常以一條下劃線為前綴
注:函數(shù)聲明語句‘被提前到外部腳本或外部函數(shù)作用于頂部,所以可以被在它定義之前出現(xiàn)的代碼所調(diào)用
以表達式方式定義函數(shù)前必須把它賦值給一個變量。所以表達式方式定義的函數(shù)在定義之前是無法調(diào)用的
函數(shù)返回值
return語句返回函數(shù)的值給調(diào)用者。 return語句沒有,則它返回undefined嵌套函數(shù)
嵌套函數(shù)可以訪問他們的函數(shù)的參數(shù)和變量 但是嵌套函數(shù)不能出現(xiàn)在循環(huán)、條件判斷,或者try/cache/finally/with語句中函數(shù)調(diào)用
作為函數(shù) 作為方法 作為構(gòu)造函數(shù) 通過他們的call()和apply()方法間接調(diào)用作為函數(shù)調(diào)用
add(1,2)
根據(jù)ECMAScript3和非嚴格的ECMAScript5對函數(shù)調(diào)用的規(guī)定,調(diào)用上下文(this的值)是全局對象。然而在嚴格模式下,調(diào)用上下文則是undefined。
//定義一個函數(shù)且調(diào)用一個函數(shù)來確定當前腳本運行是否為嚴格模式 var strict = (function(){return this;}());
作為方法調(diào)用
var o = { m:1, n:2, add:function(){ this.result = this.m+this.n; }}方法調(diào)用和函數(shù)調(diào)用的一個重大區(qū)別。----調(diào)用上下文
o.add() add的調(diào)用上下文為o,即:this
o.add() 等同于o['add']()
方法鏈:當方法并不需要返回值時候,最好直接返回this
this為一個關鍵字,不是變量,也不是屬性名。JavaScript語法不允許給this賦值
和變量不同,關鍵字this沒有作用于的限制,嵌套的函數(shù)不會從調(diào)用它的函數(shù)中繼承this,如果想訪問外部函數(shù)的this,var self= this;保存在變量中
如果嵌套函數(shù)作為函數(shù)調(diào)用,其this的值指向調(diào)用它的對象。如果作為函數(shù)調(diào)用,this不是全局對象(非嚴格模式),就是undefined(嚴格模式)
構(gòu)造函數(shù)調(diào)用
var o = new Object();
構(gòu)造函數(shù)調(diào)用和普通函數(shù)調(diào)用以及方法調(diào)用在實參處理。調(diào)用上下文和返回值等方面都有不同。
新聞熱點
疑難解答
圖片精選