匿名函數
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 返回值})();
本文出自 “祝融與火” 博客,謝絕轉載!
匿名函數