Javascript中定義函數的方式有多種,函數直接量就是其中一種。
如var fun = function(){},這里function如果不賦值給fun那么它就是一個(gè)匿名函數。好,看看匿名函數的如何被調用。
方式1,調用函數,得到返回值。強制運算符使函數調用執行(function(x,y){ alert(x+y); return x+y; }(3,4)); 方式2,調用函數,得到返回值。
強制函數直接量執行再返回一個(gè)引用,引用再去調用執行(function(x,y){ alert(x+y); return x+y;} )(3,4); 這種方式也是很多庫愛(ài)用的調用方式,如jQuery,Mootools。 方式3,使用voidvoid function(x) { x = x-1; alert(x);}(9);。
JS函數的定義方式比較靈活,它不同于其他的語(yǔ)言,每個(gè)函數都是作為一個(gè)對象被維護和運行的。
先看幾種常用的定義方式:
function func1([參數]){
/*函數體*/
}
var func2=function([參數]){
/*函數體*/
};
var func3=function func4([參數]){
/*函數體*/
};
var func5=new Function();
上述第一種方式是最常用的方式,不用多說(shuō)。
第二種是將一匿名函數賦給一個(gè)變量,調用方法:func2([函數]);
第三種是將func4賦給變量func3,調用方法:func3([函數]);或func4([函數]);
第四種是聲明func5為一個(gè)對象。
再看看它們的區別:
function func(){
//函數體
}
//等價(jià)于
var func=function(){
//函數體
}
但同樣是定義函數,在用法上有一定的區別。
<script>
//這樣是正確的
func(1);
function func(a)
{
alert(a);
}
</script>
<script>
//這樣是錯誤的,會(huì )提示func未定義,主要是在調用func之前沒(méi)有定義
func(1);
var func = function(a)
{
alert(a);
}
//這樣是正確的,在調用func之前有定義
var func = function(a)
{
alert(a);
}
func(1);
</script>
用同樣的方法可以去理解第三種定義方式。
第四種定義方式也是需要聲明對象后才可以引用。
/*第一種方法,使用function語(yǔ)句,格式如下*/function fn(){ alert("這是使用function語(yǔ)句進(jìn)行函數定義"); }fn();/*第二種方法,使用Function()構造函數克隆函數*/var F = new Function("a","b","alert(a+b)"); F(a,b);其實(shí)相當于如下代碼:function F(a,b){ alert(a+b); }/*第三種方法,使用函數直接量*/var zhenn = function(){ alert("zhenn"); } zhenn();。
定義函數的種方法1.
最基本的作為一個(gè)本本分分的函數聲明使用。
復制代碼代碼如下:function func(){}或var func=function(){};2.
作為一個(gè)類(lèi)構造器使用:復制代碼代碼如下:function class(){}
class.prototype={};
var item=new class();3.
作為閉包使用:復制代碼代碼如下:(function(){
//獨立作用域})();4.
可以作為選擇器使用:復制代碼代碼如下:var addEvent=new function(){
if(!-[1,]) return function(elem,type,func){attachEvent(elem,'on'+type,func);};
else return function(elem,type,func){addEventListener(elem,type,func,false);}
};//避免了重復判斷5.
在JavaScript中定義對象可以采用以下幾種方式: 1.基于已有對象擴充其屬性和方法 2.工廠(chǎng)方式 3.構造函數方式 4.原型(“prototype”)方式 5.動(dòng)態(tài)原型方式-- 1.基于已有對象擴充其屬性和方法object.name = "zhangsan";object.sayName = function(name){ this.name = name; alert(this.name);}object.sayName("lisi");-- 2.工廠(chǎng)方式 function createObject() { var object = new Object(); object.username = "zhangsan"; object.password = "123"; object.get = function() { alert(this.username + ", " + this.password); } return object;}var object1 = createObject();var object2 = createObject();object1.get(); -- 采用帶參數的構造方法:function createObject(username, password){ var object = new Object(); object.username = username; object.password = password; object.get = function() { alert(this.username + ", " + this.password); } return object;}var object1 = createObject("zhangsan", "123");object1.get();。
JS函數的定義方式比較靈活,它不同于其他的語(yǔ)言,每個(gè)函數都是作為一個(gè)對象被維護和運行的。
先看幾種常用的定義方式:function func1([參數]){/*函數體*/}var func2=function([參數]){/*函數體*/};var func3=function func4([參數]){/*函數體*/};var func5=new Function();上述第一種方式是最常用的方式,不用多說(shuō)。第二種是將一匿名函數賦給一個(gè)變量,調用方法:func2([函數]);第三種是將func4賦給變量func3,調用方法:func3([函數]);或func4([函數]);第四種是聲明func5為一個(gè)對象。
再看看它們的區別:function func(){//函數體}//等價(jià)于var func=function(){//函數體}但同樣是定義函數,在用法上有一定的區別。用同樣的方法可以去理解第三種定義方式。
第四種定義方式也是需要聲明對象后才可以引用。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.627秒