函數在js中扮演了幾個角色?api
構造函數主要用來實例化對象數組
通常普通函數都是用來實現某一個特定的功能瀏覽器
函數能夠做爲一個普通對象使用緩存
總結:函數到底扮演什麼角色取決於函數的調用方式安全
函數聲明的方式:app
下面的代碼只會在內存中產生一個函數 節省內存 結果爲1的函數函數
下面的代碼不可使用,不規範,不能造成隔離的空間,在不一樣的瀏覽器中的處理方式不同,且佔用空間,用表達式更節省內存性能
若是函數沒有參數,那麼Function的參數表示函數體this
若是函數有參數,那麼Function最後一個參數表示函數體,以前的表示實際參數spa
以上的new Function()產生函數的缺點:代碼的可讀性較低的,性能比較低,函數體是字符串,有一個字符串轉成js代碼的過程比較耗時
new Function()產生函數的優勢:能夠動態解析js字符串形式的代碼---相似於eval()的用法
eval()有安全隱患,推薦用JSON.parse()
函數調用的方式:
這種狀況調用, 三者等效
參數處理上:call參數是單個的,apply參數是數組
call/apply的用法:
bind方法的基本使用(ES5新特性),做用也是改變函數內部this的指向
傳參:
應用:bind會返回一個新的函數
==
什麼是類數組?
類數組是一個對象:對象的鍵是整數形式的索引,與數組的鍵相似;必須有length屬性,length屬性的值與索引形式的鍵值對的個數相同
注意:類數組不是數組,而且不能夠調用數組的方法
能夠添加數據,可是length的值不會自動改變
類數組轉化:
類數組場景1:document.getElementsByTagName
轉化:
添加並調用api:
類數組場景2:jQuery
類數組場景3:arguments
arguments本質是類數組,arguments.length表示實參的個數,
鼠標事件:
傳參:
window做爲實參的用意:提升性能;方便代碼壓縮,節省帶寬
undefined做爲形參的用意:防止undefined的值被修改(早期的低版本瀏覽器中)
jQuery源代碼最外層就是這樣作的
關於this
this到底指向誰取決於函數調用的方式
this出現的場景:
在非嚴格模式下,this指的是window,在嚴格模式下,this指的是undefined
window
嚴格模式:對語法規則要求更加嚴格
構造函數中的this與原型方法中的this指向相同,都指向實例對象
lisi lisi
對象方法中的this就是方法的調用者
hello
定時函數中的this值就是window
window
事件函數中的this指的是綁定事件的對象
input
什麼時候須要緩存this?
this的指向發生改變的時候
例子:
高階函數
hellojerry
lisi
123
111