上節我們介紹了《JavaScript工作體系中不可或缺的函數》,函數是由事件驅動(dòng)的或者當它被調用時(shí)執行的可重復使用的代碼塊。接下來(lái)我們說(shuō)說(shuō)js當中定義(聲明)函數的幾種方式,以及每種方式的特點(diǎn)和與其他方式的區別。
1、 函數式聲明
function funName(arg1, arg2){ alert(arg1 + “,” + arg2); } |
特點(diǎn):此種方式可定義命名的函數變量,而無(wú)需給變量賦值,這是一種獨立的結構,不能嵌套在非功能模塊中。函數名在自身作用域和父作用域內是可獲取的(其他域是娶不到的)。當解析器讀取js代碼時(shí),會(huì )先讀取函數的聲明,此種方式定義的函數在執行任何代碼之前都可以訪(fǎng)問(wèn)(調用)。
2、 函數表達式(函數字面量)
var fun = function(arg1, arg2){ alert(arg1 + “,” + arg2); }
|
var fun = function funName(arg1,arg2){ alert(arg1 + “,” + arg2); } |
(function hello(){ alert(“HelloWorld!!!”); })(); // 自調用 |
特點(diǎn):地中方式是將函數定義為表達式語(yǔ)句的一部分。函數可以是命名的也可以是匿名的。而且必須等到解析器執行到它所在的代碼行才能真正被解釋執行。
3、 函數構造法,參數必須加引號
var fun = new Function(‘a(chǎn)rg1’, ‘a(chǎn)rg2’, ‘a(chǎn)lert(arg1 + “,” + arg2)’); |
特點(diǎn):從技術(shù)角度講,這是一個(gè)函數表達式。但是一般不推薦這種方式。
4、 對象直接量
var obj = { name : “”, getName : function(){ return this.name; }, setName : function(name){ this.name = name; } }; |
特點(diǎn):將方法的定義看做為一個(gè)對象的成員變量,此時(shí)對象的變量值為一個(gè)方法,通過(guò)訪(fǎng)問(wèn)該對象的屬性名稱(chēng),達到調用方法的效果。
5、 原型繼承
var obj = new Function(); obj.prototype = { name : “”, getName : function(){ return this.name; }, setName : function(name){ this.name = name; } }; |
特點(diǎn):定義了一個(gè)函數對象,在其原型對象中定義方法。在使用prototype的方法時(shí),必須實(shí)例化該對象才能調用其方法。
6、 工廠(chǎng)模式
function obj(){ var temp = new Object(); temp.name = “”; temp.getName = function(){ return this.name; }; temp.setName(name){ this.name = name; }; return temp; } |
特點(diǎn):工廠(chǎng)模式是軟件工程領(lǐng)域一種廣為人知的設計模式,由于在ECMAScript中無(wú)法創(chuàng )建類(lèi),因此用函數封裝以特定接口創(chuàng )建對象。即在一個(gè)函數內創(chuàng )建一個(gè)對象,給對象賦予屬性和方法再將其對象返回。
以上介紹的幾種js中創(chuàng )建方法常用的方式,根據其特點(diǎn)和理解可以根據實(shí)際情況使用不同的方式聲明函數。
聯(lián)系客服