亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript的函數(shù)第1/3頁

 更新時間:2006年07月28日 00:00:00   作者:  

作者:F. Permadi
譯者:Sheneyan(子烏)
英文原文: INTRODUCTION TO JavaScript Functions
中文譯文(包括示例):javascript的函數(shù)
子烏注:一篇相當(dāng)不錯的function入門文章,個人感覺相當(dāng)經(jīng)典。

詞語翻譯列表:

function:函數(shù)(Function未翻譯)
declare:定義
assign:指派,分配
functionbody:函數(shù)體(就是函數(shù)的內(nèi)容)
object:對象
property:屬性
unnamed:匿名(在這里沒翻譯成未命名)
object oriented programming:面相對相編程
class:類(比如后面的class data type我翻譯成類數(shù)據(jù)類型)
pointer:指針
reassign:重新分配
nest:嵌套
feature:功能,特性
local/global:局部/全局
blueprint:藍圖(?)
user defined:用戶自定義
instance:實例
prototype:原型(除了標(biāo)題都不翻譯)
internal:內(nèi)部
constructor:構(gòu)造器
duplication:

函數(shù):定義

有以下這些方法可以定義一個函數(shù)。所有這些都是有效的,但是它們在后臺如何實現(xiàn)的則有一些差別。

常用的寫法

一般大家都用這個寫法來定義一個函數(shù):

CODE:
functionName([parameters]){functionBody};

Example D1:

CODE:
function add(a, b)
{                    
  return a+b;
}                    
alert(add(1,2));        // 結(jié)果 3

當(dāng)我們這么定義函數(shù)的時候,函數(shù)內(nèi)容會被編譯(但不會立即執(zhí)行,除非我們?nèi)フ{(diào)用它)。而且,也許你不知道,當(dāng)這個函數(shù)創(chuàng)建的時候有一個同名的對象也被創(chuàng)建。就我們的例子來說,我們現(xiàn)在有一個對象叫做“add”(要更深入了解,看底下函數(shù):對象節(jié)。)

匿名函數(shù)

我們也可以通過指派一個變量名給匿名函數(shù)的方式來定義它。

Example D2

CODE:
var add=function(a, b)
{                    
  return a+b;
}                    
alert(add(1,2));        // 結(jié)果 3

這個代碼和前一個例子做了同樣的事情。也許語法看起來比較奇怪,但它應(yīng)該更能讓你感覺到函數(shù)是一個對象,而且我們只是為這個對指派了一個名稱。可以把它看做和 var myVar=[1,2,3]一樣的語句。以這種方式聲明的函數(shù)內(nèi)容也一樣會被編譯。

當(dāng)我們指派一個這樣的函數(shù)的時候,我們并不一定要求必須是匿名函數(shù)。在這里,我作了和ExampleD2一樣的事情,但我加了函數(shù)名“theAdd”,而且我可以通過調(diào)用函數(shù)名或者是那個變量來引用函數(shù)。

Example D2A

CODE:
var add=function theAdd(a, b)
{                    
  return a+b;
}                    
alert(add(1,2));           // 結(jié)果 3
alert(theAdd(1,2));        // 結(jié)果也是 3

使用這種方式來定義函數(shù)在面向?qū)ο缶幊讨惺呛苡杏玫?,因為我們能像底下這樣使一個函數(shù)成為一個對象的屬性。

CODE:
var myObject=new Object();
myObject.add=function(a,b){return a+b}; 
// myObject 現(xiàn)在有一個叫做“add”的屬性(或方法)
// 而且我能夠象下面這樣使用它
myObject.add(1, 2);

我們也能夠通過使用運算符new來定義一個函數(shù)。這是一個最少見的定義函數(shù)的方式并且并不推薦使用這種方式除非有特殊的理由(可能的理由見下)。語法如下:

CODE:
varName=new Function([param1Name, param2Name,...paramNName], functionBody);

Example D3:

CODE:
var add=new Function("a", "b", "return a+b;");
alert(add(3,4));        // 結(jié)果 7

我在這里有兩個參數(shù)叫做a和b,而函數(shù)體返回a和b的和。請注意new Function(...)使用了大寫F,而不是小寫f。 這就告訴javascript,我們將要創(chuàng)建一個類型是Function的對象。 還要注意到,參數(shù)名和函數(shù)體都是作為字符串而被傳遞。我們可以隨心所欲的增加參數(shù),javascript知道函數(shù)體會是右括號前的最后一個字符串(如果沒有參數(shù),你能夠只寫函數(shù)體)。你沒必要將所有東西都寫在一行里(使用\或者使用字符串連接符+來分隔長代碼)。\標(biāo)記告訴JavaScript在下一行查找字符串的其余部分。例子如下:

Example D4

CODE:
var add=new Function("a", "b",
  "alert" +                      // 注意 "+"
  "('adding '+a+' and ' +b);\    // 和 "\"的不同用法
   return a+b;");
alert(add(3,4));        // 結(jié)果 7

采用這種方式定義函數(shù)會導(dǎo)致函數(shù)并沒被編譯,而且它有可能會比用其它方式定義的函數(shù)要慢。至于為什么,看一下這個代碼:

Example D5

CODE:

function createMyFunction(myOperator)
{
  return new Function("a", "b", "return a" + myOperator + "b;");
}

var add=createMyFunction("+");                // 創(chuàng)建函數(shù) "add"
var subtract=createMyFunction("-");           // 創(chuàng)建函數(shù) "subtract"
var multiply=createMyFunction("*");           // 創(chuàng)建函數(shù) "multiply"
// test the functions
alert("加的結(jié)果="+add(10,2));                  // 結(jié)果是 12
alert("減的結(jié)果="+subtract(10,2));             // 結(jié)果是 8
alert("乘的結(jié)果="+multiply(10,2));             // 結(jié)果是 20
alert(add);

 

這個有趣的例子創(chuàng)建了三個不同的function,通過實時傳遞不同的參數(shù)來創(chuàng)建一個新Function。因為編譯器沒法知道最終代碼會是什么樣子的,所以new Function(...)的內(nèi)容不會被編譯。那這有什么好處呢?嗯,舉個例子,如果你需要用戶能夠創(chuàng)建他們自己的函數(shù)的時候這個功能也許很有用,比如在游戲里。我們也許需要允許用戶添加“行為”給一個“player”。但是,再說一次,一般情況下,我們應(yīng)該避免使用這種形式,除非有一個特殊的目的。

函數(shù):對象

函數(shù)是javascript中的一種特殊形式的對象。它是第一個[b〕類數(shù)據(jù)類型(class data type)。這意味著我們能夠給它增加屬性。這里有一些需要注意的有趣觀點:

對象的創(chuàng)建

就像剛才提及的,當(dāng)我們定義一個函數(shù)時,javascript實際上在后臺為你創(chuàng)建了一個對象。這個對象的名稱就是函數(shù)名本身。這個對象的類型是function。在下面的例子,我們也許不會意識到這一點,但我們實際上已經(jīng)創(chuàng)建了一個對象:它叫做Ball。

Example 1

CODE:
function Ball()       // 也許看起來有點奇怪,但是這個聲明
{                     // 創(chuàng)建了一個叫做Ball的對象
  i=1;
}                    
alert(typeof Ball);     // 結(jié)果 "function"

我們甚至能將這個對象的內(nèi)容打印出來而且它會輸出這個函數(shù)的實際代碼,Example2: 點擊 alert(Ball);來看看Ball的內(nèi)容。

屬性的添加

我們能夠添加給Object添加屬性,包括對象function。因為定義一個函數(shù)的實質(zhì)是創(chuàng)建一個對象。我們能夠“暗地里”給函數(shù)添加屬性。比如,我們這里定義了函數(shù)Ball,并添加屬性callsign。

CODE:
function Ball()       // 也許看起來有點奇怪,但是這個聲明
{                     // 創(chuàng)建了一個叫做Ball的對象,而且你能夠
}                     // 引用它或者象下面那樣給它增加屬性
Ball.callsign="The Ball"; // 給Ball增加屬性
alert(Ball.callsign); // 輸出 "The Ball"

指針

因為function是一個對象,我們能夠為一個function分配一個指針。如下例,變量ptr指向了對象myFunction。

CODE:
function myFunction(message)
{
  alert(message);
}
var ptr=myFunction;  // ptr指向了myFunction
ptr("hello");         // 這句會執(zhí)行myFunction:輸出"hello"

我們能夠運行這個函數(shù),就好像這個函數(shù)名已經(jīng)被指針名代替了一樣。所以在上面,這行ptr("hello"); 和myFunction("hello");的意義是一樣的。

指向函數(shù)的指針在面向?qū)ο缶幊讨邢喈?dāng)有用。例如:當(dāng)我們有多個對象指向同一個函數(shù)的時候(如下):

Example 4A

CODE:
function sayName(name)
{
  alert(name);
}
var object1=new Object();      // 創(chuàng)建三個對象
var object2=new Object();
var object3=new Object();
object1.sayMyName=sayName;       // 將這個函數(shù)指派給所有對象
object2.sayMyName=sayName;
object3.sayMyName=sayName;

object1.sayMyName("object1");    // 輸出 "object1"
object2.sayMyName("object2");    // 輸出 "object2"
object3.sayMyName("object3");    // 輸出 "object3"

因為只有指針被保存(而不是函數(shù)本身),當(dāng)我們改變函數(shù)對象自身的時候,所有指向那個函數(shù)的指針都會發(fā)生變化。我們能夠在底下看到:

Example 5:

CODE:

function myFunction()
{
  alert(myFunction.message);
}
myFunction.message="old";
var ptr1=myFunction;                 // ptr1 指向 myFunction
var ptr2=myFunction;                 // ptr2 也指向 myFunction

ptr1();                     // 輸出 "old"
ptr2();                              // 輸出 "old"

myFunction.message="new";

ptr1();                     // 輸出 "new"
ptr2();                              // 輸出 "new"

相關(guān)文章

  • Javascript條件判斷使用小技巧總結(jié)

    Javascript條件判斷使用小技巧總結(jié)

    我們已經(jīng)知道,null?沒有任何的屬性值,并且無法獲取其實體(existence)值。所以?null.property?返回的是錯誤(error)而不是?undefined?。
    2008-09-09
  • JS實現(xiàn)滑動條案例

    JS實現(xiàn)滑動條案例

    這篇文章主要為大家詳細介紹了JS實現(xiàn)滑動條案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • javascript中的糖衣語法Promise對象詳解

    javascript中的糖衣語法Promise對象詳解

    這篇文章主要介紹了javascript中的糖衣語法Promise對象詳解,Promise 對象代表了未來將要發(fā)生的事件,用來傳遞異步操作的消息,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 基于JS實現(xiàn)回到頁面頂部的五種寫法(從實現(xiàn)到增強)

    基于JS實現(xiàn)回到頁面頂部的五種寫法(從實現(xiàn)到增強)

    這篇文章主要介紹了基于JS實現(xiàn)回到頁面頂部的五種寫法(從實現(xiàn)到增強)的相關(guān)資料,本文介紹的非常詳細,實用性也非常高,非常具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • javascript 跨瀏覽器開發(fā)經(jīng)驗總結(jié)(五) js 事件

    javascript 跨瀏覽器開發(fā)經(jīng)驗總結(jié)(五) js 事件

    javascript 跨瀏覽器開發(fā)之js 事件的兼容性問題,需要的朋友可以參考下。
    2010-05-05
  • JavaScript異步隊列進行try?catch時的問題解決

    JavaScript異步隊列進行try?catch時的問題解決

    這篇文章主要介紹了JavaScript異步隊列進行try?catch時的問題解決,文章圍繞主題展開詳細的的相關(guān)內(nèi)容介紹,需要的朋友可以參考一下
    2022-07-07
  • JS中6個對象數(shù)組去重的方法

    JS中6個對象數(shù)組去重的方法

    這篇文章主要給大家介紹了關(guān)于JS中6個對象數(shù)組去重的方法,javascript數(shù)組去重是一個比較常見的需求,解決方法也有很多種,文中每種解決方法都給出了示例代碼,需要的朋友可以參考下
    2023-07-07
  • uniapp開發(fā)APP之強制更新和熱更新的實現(xiàn)

    uniapp開發(fā)APP之強制更新和熱更新的實現(xiàn)

    使用uni-app開發(fā),可將代碼編譯到iOS、Android、微信小程序等多個平臺,升級時也需考慮多平臺同步升級,下面這篇文章主要給大家介紹了關(guān)于uniapp開發(fā)APP之強制更新和熱更新的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 使用Fullpage插件快速開發(fā)整屏翻頁的頁面

    使用Fullpage插件快速開發(fā)整屏翻頁的頁面

    這篇文章給大家分析使用Fullpage插件快速開發(fā)整屏翻頁的頁面,適用于各大網(wǎng)站,此功能非常高大上,下面就跟隨腳本之家小編看看Fullpage插件是怎么實現(xiàn)此效果的
    2017-09-09
  • javascript中的float運算精度實例分析

    javascript中的float運算精度實例分析

    javascript中的float運算精度的一些問題,下面是具體的說明。
    2010-08-08

最新評論