摘要:什么是函數(shù)的作用域函數(shù)作用域在中,作用域?yàn)榭稍L問變量,對(duì)象,函數(shù)的集合。函數(shù)作用域作用域在函數(shù)內(nèi)修改。與函數(shù)又有什么關(guān)系呢對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的。
什么是函數(shù)的作用域
函數(shù)作用域:在 JavaScript 中,作用域?yàn)榭稍L問變量,對(duì)象,函數(shù)的集合。JavaScript 函數(shù)作用域: 作用域在函數(shù)內(nèi)修改。
this 與函數(shù)又有什么關(guān)系呢?this對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的。比如:在全局函數(shù)中,this 等同于 window 或者 global,而當(dāng)函數(shù)被作為方法調(diào)用時(shí),this 等于那個(gè)對(duì)象。特別需要注意的是在執(zhí)行諸如:setInterval、setTimeout 等函數(shù)的回調(diào)時(shí),此時(shí)的 this 其實(shí)是指向全局 window 的,因?yàn)轭愃七@樣的方法其實(shí)是 window 的屬性方法。所以我們經(jīng)常會(huì)看到類似下面的代碼:
var a = { age: 21, addAge: function() { var that = this setInterval(function() { that.age += 1 }, 1000) }那我們想改變函數(shù)執(zhí)行時(shí)綁定的 this 怎么辦呢?
call、apply、bind 可以用來(lái)干這個(gè)事情,哈哈~
call、apply 的用法:每個(gè)函數(shù)都有兩個(gè)非繼承而來(lái)的方法: apply ( ) 和 call ( )。這兩個(gè)方法的用途都是在特定的作用域中調(diào)用函數(shù),實(shí)際上就是用來(lái)設(shè)置函數(shù)體內(nèi)的 this對(duì)象 的值。兩個(gè)方法的作用是相同的,唯一的區(qū)別是接收參數(shù)的方式不一樣。兩個(gè)方法的第一個(gè)參數(shù)是接收一個(gè)對(duì)象或者 null,區(qū)別是 apply 接收兩個(gè)參數(shù),第二個(gè)參數(shù)可以是 數(shù)組或者類數(shù)組的對(duì)象(arguments)這樣。ES6 的 Set 實(shí)例也可以。call 方法就比較厲害了,它接收多個(gè)參數(shù),除第一個(gè)對(duì)象參數(shù)外,其余的參數(shù)要一個(gè)一個(gè)列出來(lái)。
function sum(num1, num2) { return num1 + num2 } sum.apply(this, [1, 2]) // 3 sum.call(this, 1, 2) // 3
其實(shí),call 和 apply 方法的強(qiáng)大在于,能擴(kuò)充函數(shù)運(yùn)行的運(yùn)用域:
var color = "yellow" var obj = { color: "blue" } function checkColor () { console.log(this.color) } checkColor() // yellow checkColor.call(this) // yellow checkColor.call(window) // yellow,此處 this === window checkColor.call(obj) // blue那 bind 可以用來(lái)干點(diǎn)啥好事兒呢?
ES 5 為函數(shù)定義了一個(gè) bind 方法。這個(gè)方法會(huì)創(chuàng)建一個(gè)函數(shù)的實(shí)例,實(shí)例執(zhí)行時(shí)的 this 值會(huì)被綁定到傳給 bind ( ) 函數(shù)的值。舉個(gè)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/109541.html
摘要:出現(xiàn)箭頭函數(shù)的時(shí)候,指向?yàn)槎x時(shí)的上下文對(duì)象而非指向時(shí),并且不能被改變首先我們先看一個(gè)例子由上面的例子我們可以看出來(lái)此時(shí)指針在用改變了之后指向的依然是全局對(duì)象非嚴(yán)格瀏覽器環(huán)境中是而非。 javascript基礎(chǔ)之this指針 越往后面學(xué)越發(fā)現(xiàn)基礎(chǔ)的重要性,所以打算重新過(guò)一遍基礎(chǔ),之后出幾個(gè)vue和react的實(shí)戰(zhàn)教程。ok,嚴(yán)歸正傳。 首先什么是this this是執(zhí)行上下文創(chuàng)建時(shí)確定...
摘要:面向?qū)ο缶幊虒?duì)象的原生方法分成兩類自身的方法靜態(tài)方法和的實(shí)例方法。的靜態(tài)方法方法與,參數(shù)是對(duì)象,返回一個(gè)數(shù)組,數(shù)組的值是改對(duì)象自身的所有屬性名區(qū)別在于返回可枚舉的屬性,返回不可枚舉的屬性值。 面向?qū)ο缶幊?Objects對(duì)象的原生方法分成兩類:Object自身的方法(靜態(tài)方法)和Object的實(shí)例方法。注意Object是JavaScript的原生對(duì)象,所有的其他對(duì)象都是繼承自O(shè)bjec...
摘要:而當(dāng)做普通函數(shù)調(diào)用的話,實(shí)際上即第種情況下,對(duì)函數(shù)普通調(diào)用,此時(shí)的指向這是正常情況下,會(huì)正確返回并且指向該對(duì)象,但是在構(gòu)造函數(shù)當(dāng)中,如果返回了一個(gè)對(duì)象,那么會(huì)指向返回的那個(gè)對(duì)象。 this應(yīng)該是一個(gè)討論了很久的話題了。其中,關(guān)于this的文章,在很多的博客當(dāng)中也有很多介紹,但是,以前我都是一知半解的去了解它,就是看博客當(dāng)中,只介紹了一些情況下的 this 的使用方式,但是也并沒有自己去...
摘要:但是有一個(gè)總的原則,那就是指的是,調(diào)用函數(shù)的那個(gè)對(duì)象作為函數(shù)調(diào)用在函數(shù)被直接調(diào)用時(shí)綁定到全局對(duì)象。這一過(guò)程分為三步創(chuàng)建類的實(shí)例。這步是把一個(gè)空的對(duì)象的屬性設(shè)置為。函數(shù)被傳入?yún)?shù)并調(diào)用,關(guān)鍵字被設(shè)定為該實(shí)例。 this 的值到底是什么?一次說(shuō)清楚你怎么還沒搞懂 this?this、apply、call、bind 一、Whats this? 由于運(yùn)行期綁定的特性,JavaScript 中的...
摘要:一是什么函數(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ì)象。也就是說(shuō)函數(shù)的this會(huì)指向調(diào)用函數(shù)的執(zhí)行環(huán)境。 function a(){ retur...
閱讀 1918·2021-11-22 09:34
閱讀 1158·2021-10-09 09:44
閱讀 3046·2021-09-29 09:35
閱讀 3626·2021-09-14 18:01
閱讀 1494·2021-08-16 10:49
閱讀 1096·2019-08-29 14:11
閱讀 859·2019-08-29 12:47
閱讀 3081·2019-08-26 13:47