this(函數(shù)的上下文)的最終指向和callee,call,apply

this對(duì)于很多新手玩家來說,是一個(gè)難點(diǎn),而且在面試題中也會(huì)被this給虐成狗~下面就具體看看this到底有多6

  • 記住this最終指向它的調(diào)用者(只有函數(shù)在調(diào)用了之后才會(huì)有this的存在)
    規(guī)律一:函數(shù)用圓括號(hào)調(diào)用,函數(shù)上下文是window對(duì)象
function fun() {
        var a=100;//局部變量不屬于任何對(duì)象的屬性誉碴,只是存放在內(nèi)存中的堆里
        alert(this.a)
    }
    var a=200;
    fun()//200
//結(jié)論:此時(shí)是window在調(diào)用fun函數(shù)轻要,相當(dāng)于window.fun(),window此時(shí)隱藏了而已

規(guī)律二:函數(shù)如果作為一個(gè)對(duì)象的方法椭懊,對(duì)象打點(diǎn)調(diào)用宇立,函數(shù)上下文就是這個(gè)對(duì)象

function fun() {
        var a=888;
        alert(this.a)
    }

    var obj={
        "a":10,
        "b":20,
        "c":fun
    }
    obj.c();//10

規(guī)律三:函數(shù)是事件處理函數(shù)踪宠,函數(shù)的上下文就是觸發(fā)這個(gè)事件的對(duì)象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div{
            width: 50px;
            height: 50px;
            background:pink;
        }
    </style>
</head>
<body>
    <div id="box"></div>
</body>
<script type="text/javascript">
    function fun() {
        this.style.background="red"http://this表示box,點(diǎn)擊box變紅
    }

    var box=document.getElementById("box");
    box.onclick=fun;
</script>
</html>

此時(shí)如果有多個(gè)盒子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        div{
            width: 50px;
            height: 50px;
            background:pink;
        }
    </style>
</head>
<body>
    <div id="box1"></div>
    <div id="box2"></div>
    <div id="box3"></div>
</body>
<script type="text/javascript">

    function fun() {
        this.style.background="red"http://此時(shí)this代表的是各自box,
    }

    var box1=document.getElementById("box1");
    var box2=document.getElementById("box2");
    var box3=document.getElementById("box3");
    box1.onclick=fun;
    box2.onclick=fun;
    box3.onclick=fun;

</script>
</html>

規(guī)律四:定/延時(shí)器調(diào)用函數(shù)妈嘹,this是window對(duì)象

function fun() {
        console.log(this)
    }
    setInterval(fun,1000)
image.png

考考你:結(jié)合規(guī)律三

var box=document.getElementById("box");
box.onclick=function(){
        //var self=this;如果想this不變柳琢,得用變量先存起來(sleft.style.background="red")
    setTimeout(function(){
    this.style.background="red"
     
    },1000)
}
//結(jié)論:此時(shí)會(huì)報(bào)錯(cuò),因?yàn)榇藭r(shí)的this是window

規(guī)律五:數(shù)組中存放的函數(shù)润脸,被數(shù)組索引調(diào)用柬脸,this就是這個(gè)數(shù)組

function fun(a,b,c,d,e,f){
        alert(this.length)
    }
    var arr=[fun,"dd","cc"]//數(shù)組長度是3
    var length=10;
    arr[0]();//3

小測(cè)試:先自己思考,記下答案毙驯,我會(huì)把答案放在文末
1

function fn(){
        alert(this.a)
    }
    var obj={
        "a":1,
        "b":2,
        "c":[{
            "a":3,
            "b":4,
            "c":fn
        }]
    }
    var a=5;
    obj.c[0].c()    

2 :arguments見上篇

function fn(m,n,o,p,q,r){
        alert(this.length)
    }

    function fun(a,b){
        arguments[0](9,10,11,12,13)
    }

    fun(fn,5,6,7)  

解釋一下arguments.callee

function fun(a,b,c,d,e,f){
        console.log(arguments.callee===fun);//true,表示的是函數(shù)自身
        console.log(arguments.callee.length);//6 表示函數(shù)自身倒堕,自身長度就是形參
        console.log(arguments.length);//3  表示的是實(shí)參個(gè)數(shù)
    }
    fun(55,66,77)

call和apply的異同點(diǎn)

:二者都是函數(shù)對(duì)象的方法,只能是函授打點(diǎn)調(diào)用~爆价,表示用指定的上下文執(zhí)行這個(gè)函數(shù)垦巴;

function fun(){
        alert(this.age)
    }
    var obj = {
        name:"xj",
        age:"24",
        like:"play"
    }
    fun()  //undefined
    fun.apply(obj) //24
    fun.call(obj)  //24

:apply只接受數(shù)組,call只接受用逗號(hào)分割的參數(shù)

function fun(a,b,c){
        alert(a+b+c)
    }
        var obj={
            name:"xj",
            age:24
        }
    fun.call(obj,6,7,8)  //21
    //fun.apply(obj,6,7,8) //報(bào)錯(cuò)
    fun.apply(obj,[6,7,8])//21

應(yīng)用:
1铭段、求最大值:
Math.max(3,4,5,6)//6
2骤宣、求一個(gè)數(shù)組的最大值
Math.max.apply(window,[4,5,6,7,8])//8

》》》》》》》小測(cè)試答案《《《《《《《《
1、3 //結(jié)論:函數(shù)的最終調(diào)用者是對(duì)象c
2序愚、4 //結(jié)論:函數(shù)最終調(diào)用憔披。是arguments對(duì)象進(jìn)行方括號(hào)索引得到的這個(gè)函數(shù),然后加圓括號(hào)調(diào)用了爸吮,所以符合規(guī)律2活逆,或者規(guī)律5;如果你認(rèn)為argument是對(duì)象拗胜,規(guī)律2生效,如果認(rèn)為argument為數(shù)組怒允,規(guī)律5生效埂软;所以無論如何:函數(shù)fn里面的函數(shù)是argument對(duì)象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市纫事,隨后出現(xiàn)的幾起案子勘畔,更是在濱河造成了極大的恐慌,老刑警劉巖丽惶,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炫七,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钾唬,警方通過查閱死者的電腦和手機(jī)万哪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門侠驯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奕巍,你說我怎么就攤上這事吟策。” “怎么了的止?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵檩坚,是天一觀的道長。 經(jīng)常有香客問我诅福,道長匾委,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任氓润,我火速辦了婚禮赂乐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘旺芽。我一直安慰自己沪猴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布采章。 她就那樣靜靜地躺著运嗜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悯舟。 梳的紋絲不亂的頭發(fā)上担租,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音抵怎,去河邊找鬼奋救。 笑死,一個(gè)胖子當(dāng)著我的面吹牛反惕,可吹牛的內(nèi)容都是我干的尝艘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姿染,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼背亥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起悬赏,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤狡汉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后闽颇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盾戴,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年兵多,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尖啡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橄仆。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖可婶,靈堂內(nèi)的尸體忽然破棺而出沿癞,到底是詐尸還是另有隱情,我是刑警寧澤矛渴,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布椎扬,位于F島的核電站,受9級(jí)特大地震影響具温,放射性物質(zhì)發(fā)生泄漏蚕涤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一铣猩、第九天 我趴在偏房一處隱蔽的房頂上張望揖铜。 院中可真熱鬧,春花似錦达皿、人聲如沸天吓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽龄寞。三九已至,卻和暖如春汤功,著一層夾襖步出監(jiān)牢的瞬間物邑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工滔金, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留色解,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓餐茵,卻偏偏與公主長得像科阎,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忿族,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 函數(shù)和對(duì)象 1萧恕、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句肠阱,而且...
    道無虛閱讀 4,560評(píng)論 0 5
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,148評(píng)論 0 13
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,790評(píng)論 0 38
  • 善良必有善報(bào)(一): 巴西有一部著名的電影朴读, 名字是中央車站屹徘, 在98年 德國柏林國際電影節(jié)上, 獲得的名譽(yù)令人感...
    阿超Lilian閱讀 222評(píng)論 0 0