1. 程式人生 > >匿名函數

匿名函數

匿名函數

1. ***日期API

2. ***Error


1. ***日期API

單位: FullYear Month Date Day

Hours Minutes Seconds Milliseconds

API: 1. 每個單位都有一個對兒get/set方法

比如: var year=date.getFullYear()//獲取單位的值

date.setFullYear(year)//設置單位的值

特殊: Day沒有set方法

2. 命名: 年月日星期沒有s結尾

時分秒毫秒都有s結尾

3. 取值範圍: 只有Date從1~31

不考慮FullYear, 其余都是從0開始,到進制-1結束

Month: 0~11 總比現實中小1, 需要修正

Date: 1~31 不用修正

Day: 0~6 不用修正

Hours: 0~23 不用修正

Minutes/Seconds: 0~59 不用修正

日期計算:

1. 計算兩個日期的時間差: 兩日期相減,得毫秒數,再換算

2. 對任意單位做加減: 3步:

1. 取分量: var d=date.getDate();

2. 做加減: d+=60

3. 放回去: date.setDate(d);

強調: 所有set方法可自動調整時間進制

其實可簡寫為: date.setDate(date.getDate()+60)

轉字符串:

date.toString() -> 當地時間的完整時間格式

date.toLocaleString() ->當地時間的簡化版格式

date.toLocaleDateString() -> 當地時間的日期部分

date.toLocaleTimeString() -> 當地時間的時間部分

date.toGMTString() -> 標準時區的標準時間


作業: 自定義format函數: 2_format.html


2. ***Error

什麽是錯誤(bug): 程序執行過程中遇到的異常中斷。

一旦發生錯誤,程序立刻退出。

什麽是錯誤處理: 即使程序發生錯誤,也能保證程序不異常中斷的一種機制。

如何:

try{

可能發生錯誤的代碼

}catch(err){//僅在發生錯誤時,才執行

錯誤處理代碼: 1. 提示用戶錯誤信息(String(err))

2. 記錄系統日誌

}finally{

無論是否發生錯誤,都必須執行的代碼。

比如: 釋放資源!

}

err: Error對象: 在錯誤發生時,自動創建的,保存錯誤信息的對象。

錯誤類型6種:

SyntaxError 語法錯誤

ReferenceError 要使用的變量沒找到

TypeError 錯誤的調用了對象的方法

RangeError 參數範圍越界 比如: toFixed(d) 0~20


EvalError URIError

1. ***錯誤處理

2. ***Function

*****閉包


1. ***錯誤處理

只要可以提前預料的錯誤,都要用if...else...來代替try catch

只有無法提前預料的錯誤,采用try catch


主動拋出錯誤:

為什麽: 拋出錯誤通常是為了提醒使用者錯誤的使用的程序

如何: throw new Error("錯誤消息")


2. ***Function:

什麽是: js中一切函數都是對象

函數對象是專門封裝函數定義的對象。

創建: 3種:

1. 聲明: function 函數名(參數列表){函數體; return 返回值;}

何時: 只要一段代碼被反復使用,都要先定義在一個專門的函數中,再反復調用函數即可——復用

何時使用參數: 只要函數步驟中必須某些數據才能正常執行時,就要定義參數。

何時使用返回值: 如果函數的調用者需要函數的執行結果時,函數就必須返回值。

可被聲明提前:

2. 函數直接量:

var 函數名=function(參數列表){函數體; return 返回值;};

不會被聲明提前。

****聲明提前(hoist): 在開始執行程序前,將所有var聲明的變量和function聲明的函數提前到*當前作用域*的頂部,集中創建。

賦值留在原地!

何時: 只要不希望被聲明提前時。

揭示了: 函數名僅是一個普通的變量

函數定義其實是一個對象

函數名中僅保存了函數對象的地址——引用


3. 用new:

var fun=

new Function("參數1","參數2",...,"函數體; return 返回值")


比如: function compare(a,b){return a-b;}

var compare=function(a,b){return a-b;}

var compare=new Function("a","b","return a-b;");


***重載(overload):

什麽是: 相同函數名,不同參數列表的多個函數,在調用時,可根據傳入參數的不同,自動選擇對應的函數調用!

為什麽: 減輕調用者的負擔,一個函數名,可執行多種操作

何時: 一項任務,根據不同的參數,執行不同的操作流程時

如何: js語法不支持重載效果

變通: 所有函數對象內,都自動內建了一個arguments對象

arguments對象:

專門保存傳入函數的所有參數值的類數組對象

類數組對象: (object like array)

vs 數組: 相同: 下標, length, for遍歷

不同: 類數組對象是Object,不是Array,無法使用Array的API

數組是Array類型,可以使用數組類型所有的API


匿名函數:

什麽是: 函數創建時,不被任何變量引用的函數

為什麽: 節約內存

何時: 如果一個函數只用一次,用完希望自動釋放時

1. 回調callback: 將函數作為參數傳遞給另一個函數去調用

比如: arr.sort(function (a,b){return a-b});

str.replace(/reg/g,function(kw,$1,...){return ...})

2. 自調: 創建函數後立刻調用自己!

何時: 如果一個函數只執行一次,不會再重用時

為什麽: 建立臨時作用域!避免全局汙染!

如何:

(function(參數列表){函數體; return 返回值})();


本文出自 “祝融與火” 博客,謝絕轉載!

匿名函數