亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript - 關于Js中 this的一道題

瀏覽:144日期:2023-04-11 10:23:38

問題描述

var length = 10;function cl() { console.log(this.length);}var o = { length: 20, show: function (fn) {fn();arguments[0](); }}o.show(cl); // 10

關于這道題 我想知道js中this不是誰調用就指向誰么? 為什么 第一次調用 cl中的this還是指向window而不是o對象?我知道沒有用call估計就不對了,但是為什么不對呢?第二個有為什么指向了arguments?

同時 這段代碼在nodejs中運行時為什么第一次輸出為undifined?

問題解答

回答1:

直接使用函數名字調用,無論你外面包了多少層,調用者就是window。

因為那個方括號運算符,方括號運算符作為對象取值運算,在某種意義上是可以等于點.運算符的,所以這里在形式上其實可以類比成arguments.0(),你看,這不就是arguments來調用了這個函數了嘛,所以運行的時候this就指向它了。

回答2:

this的指向不是在聲明的時候確定的而是在調用的時候被定義的有這么幾種情況

普通函數調用,this為全局對象或是undefined

作為對象的方法,this為那個對象

new 表達式,this為以該函數為原型的新創建的對象

使用 apply/call指定 this

用bind綁定固定的this

事件處理函數中的this是當前的觸發事件的DOM元素(event.currentTarget)

不知道對你有沒有幫助

回答3:

就這道題而言。

o.show()執行,那么show函數作用域里面用到的this都指向 o.但其實這里是在里面調用fn(), fn并不是o去調用的,沒有o.fn... 一個比較low的原則就是函數調用點前面是誰,函數里面的this就是誰。 這里肯定是默認的window了。

arguments[0] ==> arguments.0數組也是對象,[]調用跟 . 同理,所以this就是arguments

關于node中,由于是模塊化,this指向的是global,而且var 聲明的時候不會像瀏覽器中,有window調用。node中是沒有這個機制的。

回答4:

o.show(cl) ==>相當于 o.show(function(){console.log(this) //windows});回答5:

o.show()的this指向o,但和本題無關。o.show()中的fn標識符解析得到一個引用類型(內部類型),其base屬性(本題中值為show()方法的活動對象)即是this的指向。因為活動對象返回null,所以this指向null,從而指向了window。arguments[0]()的arguments[0]同樣返回一個引用類型,其base屬性的值為arguments,所以this指向arguments。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 亚洲午夜视频在线观看 | 国产精品青草久久久久福利99 | 毛片大全在线观看 | 国产亚洲精品久久久久久午夜 | 黄色片在线免费观看 | 国产福利不卡 | 69日本人xxxxx成熟98 | 亚洲欧美综合另类 | 91短视频免费观看 | 欧美视频第一页 | 悠悠资源先锋中文站 | 草操影院| 11111日本网站 | 日韩在线视频线视频免费网站 | 欧美特黄一级高清免费的香蕉 | pr社萌汁福利视频在线观看 | 色婷婷综合久久久中文字幕 | 欧美大片天天免费看视频 | 在线播放免费人成毛片乱码 | 日本一区欧美 | 欧美精品久久一区二区三区 | 美女拍拍拍爽爽爽爽爽爽 | 国产成人精品一区二区三区 | 尤物在线观看网站 | 国产精品分类视频分类一区 | 国产高级黄区18勿进一区二区 | 色天天综合色天天害人害己 | 日本欧美成人免费观看 | 国产在线视频专区 | 国产美女在线精品免费观看 | 131美女爱做免费高清视频 | 91自产国偷拍在线 | 99视频精品全国免费 | 久久青青草视频 | 国产一区二区三区在线免费观看 | 在线观看国产精成人品 | 成人午夜影视全部免费看 | 免费国产在线观看不卡 | 日韩精品中文字幕一区二区三区 | 国产麻豆精品免费密入口 | 国产成人免费手机在线观看视频 |