JS函數強化

函數在js中扮演了幾個角色?api

  1. 構造函數

構造函數主要用來實例化對象數組

  1. 普通函數

通常普通函數都是用來實現某一個特定的功能瀏覽器

  1. 做爲對象

函數能夠做爲一個普通對象使用緩存

總結:函數到底扮演什麼角色取決於函數的調用方式安全

函數聲明的方式:app

  1. 內置函數(內置對象、庫函數)ObjectArrayDataRegExpStringNumberBooleanErrorFunction
  2. 自定義函數
  1. 函數聲明      ( 有預解析,能夠先調用再聲明 )

  1. 函數表達式     ( 沒有預解析存在 , 必須先聲明再調用 )

下面的代碼只會在內存中產生一個函數  節省內存    結果爲1的函數函數

下面的代碼不可使用,不規範,不能造成隔離的空間,在不一樣的瀏覽器中的處理方式不同,且佔用空間,用表達式更節省內存性能

  1. new Function() 產生一個函數    (通常狀況下用不到)

若是函數沒有參數,那麼Function的參數表示函數體this

若是函數有參數,那麼Function最後一個參數表示函數體,以前的表示實際參數spa

以上的new Function()產生函數的缺點:代碼的可讀性較低的,性能比較低,函數體是字符串,有一個字符串轉成js代碼的過程比較耗時

new Function()產生函數的優勢:能夠動態解析js字符串形式的代碼---相似於eval()的用法

eval()有安全隱患,推薦用JSON.parse()

 

函數調用的方式:

  1. 構造函數實例化

  1. 普通函數調用

  1. 對象方法調用

  1. call apply

這種狀況調用, 三者等效

 參數處理上:call參數是單個的,apply參數是數組

call/apply的用法

  1. 調用函數
  2. 改變所調用函數內部 this 的指向

bind方法的基本使用(ES5新特性),做用也是改變函數內部this的指向

傳參:

應用:bind會返回一個新的函數

== 

  1. 借用其餘對象的方法

  1. 把類數組轉成數組

什麼是類數組?

類數組是一個對象:對象的鍵是整數形式的索引,與數組的鍵相似;必須有length屬性,length屬性的值與索引形式的鍵值對的個數相同

注意:類數組不是數組,而且不能夠調用數組的方法

能夠添加數據,可是length的值不會自動改變

類數組轉化

類數組場景1document.getElementsByTagName

轉化:

添加並調用api

類數組場景2jQuery

類數組場景3arguments

arguments本質是類數組,arguments.length表示實參的個數,

鼠標事件:

  1. 函數當即調用

傳參:

 window做爲實參的用意:提升性能;方便代碼壓縮,節省帶寬

undefined做爲形參的用意:防止undefined的值被修改(早期的低版本瀏覽器中)

jQuery源代碼最外層就是這樣作的

關於this

this到底指向誰取決於函數調用的方式

this出現的場景:

  1. 普通函數中的 this

在非嚴格模式下,this指的是window,在嚴格模式下,this指的是undefined

window

嚴格模式:對語法規則要求更加嚴格

  1. 構造函數中的 this
  2. 原型方法中的 this

構造函數中的this與原型方法中的this指向相同,都指向實例對象

lisi  lisi 

  1. 對象方法中的 this

對象方法中的this就是方法的調用者

hello

  1. 定時函數中的 this

定時函數中的this值就是window

window

  1. 事件函數中的 this

事件函數中的this指的是綁定事件的對象

input

什麼時候須要緩存this?

this的指向發生改變的時候

例子:

高階函數

  1. 函數做爲參數

 hellojerry

lisi

  1. 函數做爲返回值

123

111

關於sort 方法排序:

相關文章
相關標籤/搜索