JS函數強化

來源:互聯網
上載者:User

標籤:call   err   原始碼   array   on()   執行個體   高階函數   element   jquery   

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

  1. 建構函式

建構函式主要用來執行個體化對象

  1. 普通函數

一般普通函數都是用來實現某一個特定的功能

  1. 作為對象

函數可以作為一個普通對象使用

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

函式宣告的方式:

  1. 內建函數(內建對象、庫函數)Object、Array、Data、RegExp、String、Number、Boolean、Error、Function
  2. 自訂函數
  1. 函式宣告     (有預解析,可以先調用再聲明)

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

下面的代碼只會在記憶體中產生一個函數  節省記憶體    結果為1的函數

下面的代碼不可以使用,不規範,不能形成隔離的空間,在不同的瀏覽器中的處理方式不一樣,且佔用空間,用運算式更節省記憶體

  1. new Function()產生一個函數   (一般情況下用不到)

如果函數沒有參數,那麼Function的參數表示函數體

如果函數有參數,那麼Function最後一個參數表示函數體,之前的表示實際參數

以上的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的值不會自動改變

類數組轉化:

類數組情境1:document.getElementsByTagName

轉化:

添加並調用api:

類數組情境2:jQuery

類數組情境3:arguments

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

滑鼠事件:

  1. 函數立即調用

傳參:

 window作為實參的用意:提高效能;方便代碼壓縮,節省頻寬

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

jQuery原始碼最外層就是這樣做的

關於this

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

this出現的情境:

  1. 普通函數中的this

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

window

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

  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 方法排序:

     

JS函數強化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.