一吏砂、在JavaScript中撵儿,call、apply和bind是Function對象自帶的三個方法狐血,這三個方法的主要作用是改變函數(shù)中的this指向淀歇。
call、apply匈织、bind方法的共同點(diǎn)和區(qū)別:
apply 浪默、 call 、bind 三者都是用來改變函數(shù)的this對象的指向的缀匕;
apply 纳决、 call 、bind 三者第一個參數(shù)都是this要指向的對象弦追,也就是想指定的上下文(函數(shù)的每次調(diào)用都會擁有一個特殊值——本次調(diào)用的上下文(context)——這就是this關(guān)鍵字的值岳链。);
apply 劲件、 call 掸哑、bind 三者都可以利用后續(xù)參數(shù)傳參;
一零远、call
定義:調(diào)用一個對象的一個方法苗分,以另一個對象替換當(dāng)前對象。
說明: call 方法可以用來代替另一個對象調(diào)用一個方法牵辣。
call 方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對象摔癣。
二、apply()
語法:apply([thisObj[,argArray]])
定義:應(yīng)用某一對象的一個方法,用另一個對象替換當(dāng)前對象择浊。
說明:如果 argArray 不是一個有效的數(shù)組或者不是 arguments 對象戴卜,那么將導(dǎo)致一個 TypeError。
如果沒有提供 argArray 和 thisObj 任何一個參數(shù)琢岩,那么 Global 對象將被用作 thisObj投剥, 并且無法被傳遞任何參數(shù)。
call 和 apply的區(qū)別
對于 apply担孔、call 二者而言江锨,作用完全一樣,只是接受參數(shù)的方式不太一樣糕篇。
call 需要把參數(shù)按順序傳遞進(jìn)去啄育,而 apply 則是把參數(shù)放在數(shù)組里。
既然兩者功能一樣拌消,那該用哪個呢挑豌?
在JavaScript 中,某個函數(shù)的參數(shù)數(shù)量是不固定的拼坎,因此要說適用條件的話浮毯,當(dāng)你的參數(shù)是明確知道數(shù)量時用 call ;而不確定的時候用 apply泰鸡,然后把參數(shù) push 進(jìn)數(shù)組傳遞進(jìn)去。當(dāng)參數(shù)數(shù)量不確定時壳鹤,函數(shù)內(nèi)部也可以通過 arguments 這個數(shù)組來遍歷所有的參數(shù)盛龄。
三、bind
bind是在EcmaScript5中擴(kuò)展的方法(IE6,7,8不支持)
bind() 方法與 apply 和 call 很相似芳誓,也是可以改變函數(shù)體內(nèi) this 的指向余舶。
總結(jié):
1、apply 锹淌、 call 匿值、bind 三者都是用來改變函數(shù)的this對象的指向的;
2赂摆、apply 挟憔、 call 、bind 三者第一個參數(shù)都是this要指向的對象烟号,也就是想指定的上下文绊谭;
3、apply 汪拥、 call 达传、bind 三者都可以利用后續(xù)參數(shù)傳參;
4、bind 是返回對應(yīng)函數(shù)宪赶,便于稍后調(diào)用宗弯;apply 、call 則是立即調(diào)用 搂妻。
二罕伯、閉包的概念
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
三叽讳、遞歸的概念
在程序中函數(shù)直接或間接調(diào)用自己最大用處有兩個追他,一個是前面提到的可以讀取函數(shù)內(nèi)部的變量,另一個就是讓這些變量的值始終保持在內(nèi)存中岛蚤。
四邑狸、正則表達(dá)式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個字符串是否含有某種子串涤妒、將匹配的子串做替換或者從某個字符串中取出符合某個條件的子串等单雾。
1、代表特殊含義的元字符
\d : 0-9之間的任意一個數(shù)字? \d只占一個位置
\w : 數(shù)字她紫,字母 下劃線 0-9 a-z A-Z _
\s : 空格或者空白等
\D : 除了\d
\W : 除了\w
\S : 除了\s
. : 除了\n之外的任意一個字符
\ : 轉(zhuǎn)義字符
| : 或者
() : 分組
\n : 匹配換行符
\b : 匹配邊界 字符串的開頭和結(jié)尾 空格的兩邊都是邊界 => 不占用字符串位數(shù)
^ : 限定開始位置 => 本身不占位置
$ : 限定結(jié)束位置 => 本身不占位置
[a-z] : 任意字母 []中的表示任意一個都可以
[^a-z] : 非字母 []中^代表除了
[abc] : abc三個字母中的任何一個 [^abc]:除了這三個字母中的任何一個字符
2硅堆、代表次數(shù)的量詞元字符
* : 0到多個
+ : 1到多個
? : 0次或1次 可有可無
{n} : 正好n次;
最后贿讹,來一張正則表達(dá)式的思維導(dǎo)圖渐逃。