十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
http源碼解讀
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比石河子網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式石河子網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋石河子地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。
什么是作用域?
作用域和調(diào)用函數(shù)訪問(wèn)變量的能力有關(guān)
作用域分局部作用域和全局作用域,同時(shí)作用域往往和變量有關(guān)系,
處在局部作用域里面可以訪問(wèn)到全局作用域的變量,反之則訪問(wèn)不到
實(shí)例如下:
var globalVariable = 'This is global variable' function globalFunction(){ var localVariable ='This is local variable' console.log('Visit global/local variable') console.log(globalVariable) console.log(localVariable) globalVariable = 'This is changed variable' console.log(globalVariable) function localFunction(){ var innerLocalVariable = 'This is inner local variable' console.log('Visit global/local/inner variable') console.log(globalVariable) console.log(localVariable) console.log(innerLocalVariable) } localFunction() } globalFunction()
執(zhí)行結(jié)果如下:
什么是上下文?
this關(guān)鍵字有關(guān),是調(diào)用當(dāng)前可執(zhí)行代碼的引用
常常代表this變量的值以及它的指向,它決定一個(gè)函數(shù)怎么被調(diào)用,當(dāng)這個(gè)函數(shù)作為一個(gè)對(duì)象的方法被調(diào)用時(shí)this總是指向調(diào)用這個(gè)方法的對(duì)象
代碼如下:
第一種
var pet = { words:'...', speak:function(){ console.log(this.words) console.log(this === pet) } } pet.speak()
執(zhí)行結(jié)果如下:
第二種:
function pet(words){ this.words = words console.log(this.words) //這個(gè)this指向頂層的global對(duì)象 console.log(this === global) } pet('...')
執(zhí)行結(jié)果如下:
第三種:
function Pet(words){ this.words = words this.speak = function(){ console.log(this.words) //此時(shí)的this指向的誰(shuí)?cat對(duì)象 console.log(this) } } var cat = new Pet('Miao') cat.speak()
執(zhí)行結(jié)果如下:
提出上下文是為了引出函數(shù)所擁有的兩個(gè)方法:call和apply,可以改變上下文執(zhí)行對(duì)象,可以在自定義上下文中執(zhí)行函數(shù),作用是一樣的
只是用法有區(qū)別
call函數(shù)需要一個(gè)參數(shù)列表,apply允許你傳遞一個(gè)參數(shù)作為數(shù)組,具體的是作用呢是調(diào)用一個(gè)對(duì)象的方法以另一個(gè)對(duì)象替換當(dāng)前對(duì)象,其實(shí)就是更改當(dāng)前對(duì)象的this指向的內(nèi)容,標(biāo)準(zhǔn)一點(diǎn)就是:以某個(gè)方法當(dāng)做指定某個(gè)對(duì)象的方法被執(zhí)行
示例如下:
var pet = { words:'...', speak:function(say){ console.log(say+' '+this.words) } } //pet.speak('Speak') var dog = { words:'Wang' } //讓dog也能有speak方法 pet.speak.call(dog,'Speak')
運(yùn)行結(jié)果如下:
利用call和apply可以方便的實(shí)現(xiàn)繼承
function Pet(words){ this.words = words this.speak = function(){ console.log(this.words) } } function Dog(words){ Pet.call(this,words) //Pet.apply(this,arguments) } //通過(guò)new生成實(shí)例對(duì)象 var dog = new Dog('Wang') dog.speak()
運(yùn)行結(jié)果如下:
這就是call和apply的用法