摘要:概述一個(gè)函數(shù)中的指向是由調(diào)用這個(gè)函數(shù)的環(huán)境來決定的。實(shí)例參數(shù)參數(shù)和一樣,不同的是和在調(diào)用函數(shù)之后會(huì)立即執(zhí)行,而方法調(diào)用并改變函數(shù)運(yùn)行時(shí)上下文后,返回一個(gè)新的函數(shù),供我們需要時(shí)再調(diào)用。
概述
一個(gè)函數(shù)中this的指向是由調(diào)用這個(gè)函數(shù)的環(huán)境來決定的。
全局
var a = 1; function b(){ var a = 2; console.log(this.a); }; b(); //1
var value = 3; function b(){ console.log(this.value); }; b();//3 此時(shí)的b函數(shù)的環(huán)境是全局的
局部
var a = 1; var c = {a:3}; c.b = function(){ var a = 2; console.log(this.a); }; c.b();//3 //立即執(zhí)行函數(shù) 由于是賦值,所以只執(zhí)行了右邊的函數(shù) var a = 1; var c = {a:3}; (c.b = function(){ var a = 2; console.log(this.a); })();//1apply、call 和 bind 改變this指向
apply
參數(shù)
只能傳兩個(gè)參數(shù),第一個(gè)參數(shù)a是改變this指向的結(jié)果對(duì)象(在非嚴(yán)格模式下,第一個(gè)參數(shù)為null或者undefined時(shí)會(huì)自動(dòng)替換為指向全局對(duì)象),第二個(gè)參數(shù)是傳給a的參數(shù)集合(arguments[數(shù)組或類數(shù)組]);
實(shí)例
var a = 1; var c = {a : 3}; function b(d,e){ var a = 2; console.log(this.a); console.log(d,e); }; b.apply(c);//3 undefined undefined b.apply();//1 undefined undefined b.apply(c,[5,6]);// 3 5 6
call
參數(shù)
第一個(gè)參數(shù)和apply()的第一個(gè)參數(shù)一樣,不同的是apply()后面是接收一個(gè)數(shù)組或類數(shù)組,call()后面是是接收的參數(shù)列表。
實(shí)例
var a = 1; var c = {a : 3}; function b(d,e){ var a = 2; console.log(this.a); console.log(d,e); }; b.call(c);//3 undefined undefined b.call();//1 undefined undefined b.call(c,5,6);// 3 5 6
bind
參數(shù)
參數(shù)和call一樣,不同的是 call()和apply()在調(diào)用函數(shù)之后會(huì)立即執(zhí)行,而bind()方法調(diào)用并改變函數(shù)運(yùn)行時(shí)上下文后,返回一個(gè)新的函數(shù),供我們需要時(shí)再調(diào)用。
實(shí)例
var a = 1; var c = {a : 3}; function b(d,e){ var a = 2; console.log(this.a); console.log(d,e); }; var b1 = b.bind(c); var b2 =b.bind(); var b3 =b.bind(c,5,6); b1();//3 undefined undefined b2();//1 undefined undefined b3()// 3 5 6
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/109526.html
摘要:目錄函數(shù)的聲明函數(shù)的屬性和方法函數(shù)的作用域閉包知識(shí)點(diǎn)小結(jié)關(guān)于函數(shù),可以從以下個(gè)方面去理解首先,數(shù)據(jù)類型上看函數(shù)在中是一種數(shù)據(jù)類型,是對(duì)象的一種其次,從功能上看函數(shù)本質(zhì)上是一段反復(fù)調(diào)用的代碼塊最后,從地位上看函數(shù)在中和其他基本數(shù)據(jù)類型一樣,可 目錄 1.函數(shù)的聲明 2.函數(shù)的屬性和方法 3.函數(shù)的作用域 4.閉包知識(shí)點(diǎn) 5.小結(jié) 關(guān)于函數(shù),可以從以下3個(gè)方面去理解:首先,數(shù)據(jù)類型上看:...
摘要:一是什么函數(shù)的內(nèi)部屬性,引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象。函數(shù)做為節(jié)點(diǎn)事件調(diào)用時(shí)指向節(jié)點(diǎn)本身做為構(gòu)造函數(shù)實(shí)力化方法時(shí)指向?qū)嵗龑?duì)象箭頭函數(shù)里的普通函數(shù),由于閉包函數(shù)是執(zhí)行的,所以指向箭頭函數(shù)的指向函數(shù)創(chuàng)建時(shí)的作用域。 一、this是什么? 函數(shù)的內(nèi)部屬性,this引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象。也就是說函數(shù)的this會(huì)指向調(diào)用函數(shù)的執(zhí)行環(huán)境。 function a(){ retur...
摘要:它們有明確的和成員函數(shù)的定義,只有的實(shí)例才能調(diào)用這個(gè)的成員函數(shù)。用和調(diào)用函數(shù)里用和來指定函數(shù)調(diào)用的,即指針的指向。同樣,對(duì)于一個(gè)后的函數(shù)使用或者,也無法改變它的執(zhí)行,原理和上面是一樣的。 函數(shù)里的this指針 要理解call,apply和bind,那得先知道JavaScript里的this指針。JavaScript里任何函數(shù)的執(zhí)行都有一個(gè)上下文(context),也就是JavaScri...
摘要:于是決定寫個(gè)歸納。如果懂了,那么下面的例子也就會(huì)做了已知調(diào)用函數(shù)的對(duì)象是,所以指向,即。相當(dāng)于在全局作用域聲明了變量,并且賦值。實(shí)際上,調(diào)用函數(shù)的是關(guān)鍵字。使用來調(diào)用函數(shù),即函數(shù)的構(gòu)造調(diào)用時(shí),我們會(huì)構(gòu)造一個(gè)新對(duì)象,并把它綁定到調(diào)用中的上。 對(duì)this的理解,我一直都是用一句話概括:誰調(diào)用它,它就指向誰。 好像也沒有什么問題,但仔細(xì)看了這本書和網(wǎng)上一些文章后,發(fā)現(xiàn)this的原理還挺講究的...
摘要:執(zhí)行完以后,將該匿名函數(shù)賦值給。上述代碼其實(shí)等價(jià)于執(zhí)行如下的代碼,函數(shù)回調(diào)場(chǎng)景基本原理可以看到,把一個(gè)定義有關(guān)鍵字的函數(shù)作為其它函數(shù)的回調(diào)函數(shù),是危險(xiǎn)的,因?yàn)樵谶\(yùn)行期會(huì)被重新賦值,上述例子很直觀的描述了這一點(diǎn),之所以報(bào)錯(cuò),是因?yàn)橹赶蛄恕? 前言 看過[阮一峰]()的關(guān)于 this 的教程,講了很多比較好的例子,但沒有對(duì)其本質(zhì)的東西解釋清楚,而且部分例證存在問題;于是,打算重寫本章節(jié),從t...
閱讀 1512·2021-11-24 09:38
閱讀 3366·2021-11-18 10:02
閱讀 3253·2021-09-22 15:29
閱讀 2937·2021-09-22 15:15
閱讀 1037·2021-09-13 10:25
閱讀 1834·2021-08-17 10:13
閱讀 1971·2021-08-04 11:13
閱讀 1973·2019-08-30 15:54