一、一個完整的JavaScript應由三部分組成:核心(ECMAScript),文檔對象模型(DOM),瀏覽器對象模型(BOM);二、ECMAScript中的參數在內部使用一個類數組來表示的,函數接收到的始終是這個類數組,在函數體內能夠經過arguments對象來訪問這個參數數組,arguments對象實際上是一個類數組,不是Array的實例,香港虛擬主機,能夠經過方括號語法來訪問,同時也可使用length方法;數組
關於arguments,它的值永遠與對應命名參數的值保持同步,由於arguments對象中的值會自動反應到對應的命名參數,即修改了arguments[1]也就修改了num2,但這並非說它們有相同的內存空間,它們的內存空間是獨立的,這種影響是單向的,修改命名參數不會改變arguments中對應的值;另外還要記住,若是隻傳入了一個參數,那麼arguments[1]設置的值不會反應到命名參數中。這是由於arguments的長度是由傳入的參數決定的,不是由定義函數時命名參數的個數決定的;另外,沒有傳遞值的命名參數將自動被賦予undefined值;瀏覽器
二、雖然arguments的主要用途是保存函數參數,但這個對象還有一個名叫callee的屬性,該屬性是一個指針,指向擁有arguments這個對象的函數。app
callee屬性的初始值就是正在被執行的function對象。callee屬性是arguments 對象的一個成員,它表示對函數對象自己的引用,這有利於匿名函數的遞歸或確保函數的封裝性,須要注意的是callee擁有length屬性,arguments.length是實參長度,arguments.callee.length是形參長度,由此可以判斷調用時形參長度是否和實參長度一致。函數
三、對於函數來講,caller 屬性只有在函數執行時纔有定義。caller這個屬性保存着調用當前函數的函數做用域;網站
四、ECMAScript中的函數是對象,所以函數也有屬性和方法,每一個函數都包含兩個屬性,length和prototype,其中length屬性表示函數但願接收的命名參數的個數;this
五、對於ECMAScript中的引用類型而言,prototype保存了它們全部的實例方法;諸如toString(),valueOf()等方法實際上都保存在prototype下;prototype
六、每一個函數都包含兩個非繼承的方法:call()和apply(),網站空間,用途都是在特定的做用域中調用函數,實際上等同於設置函數體內的this對象的值;即將函數綁定到另外一個對象上去執行。指針
call()方法和apply()方法的做用相同,它們的區別僅僅在於接收參數的方式不同,對於call( )方法而言,第一個參數this沒有變化,香港虛擬主機,變化的是傳遞給函數的參數必須逐個列舉出來;對象
call()和apply( )方法真正強大的地方在於可以擴充函數的做用域,並且對象不須要與方法有任何的耦合關係;繼承