摘要:其實(shí)是有函數(shù)生成的,它是函數(shù)的一個(gè)內(nèi)部屬性,與一樣也是函數(shù)的內(nèi)部屬性,它是在函數(shù)執(zhí)行時(shí)被生成,那么值呢的值始終是指向函數(shù)據(jù)以執(zhí)行的環(huán)境。
問題
case1:
var a = { name: "jiavan", bname: name }; console.log(a.bname);
case2:
var a = { name: "jiavan", bname: this.name }; console.log(a.bname);
case3:
var a = { name: "jiavan", bname: a.name }; console.log(bname);分析
先看case1,這是一個(gè)基礎(chǔ)差的同學(xué)經(jīng)常犯的一個(gè)錯(cuò)誤,在對象內(nèi)部,把對象的屬性當(dāng)變量使用,它的輸出結(jié)果是空的,那么為什么呢?我用新的一段代碼解釋下:
var a = { "name": "jiavan", bname: name }; console.log(a.bname);
注意"name"與name的區(qū)別,一個(gè)是對象屬性,一個(gè)是變量,而且重要的是在對象內(nèi)的這個(gè)name變量還沒有被var聲明,所以成為了全局變量,不信你可以看看window下是否掛載了一個(gè)name。
case2,this是一個(gè)古老的傳說,上面的結(jié)果會(huì)與case1一樣。值得注意的是,很多人沒有搞懂this是有誰生成的,具體的值是什么,上面直接在對象的屬性值中使用了this,此時(shí)this是指向全局,即window的(瀏覽器環(huán)境下),那么this何時(shí)生成。
其實(shí)this是有函數(shù)生成的,它是函數(shù)的一個(gè)內(nèi)部屬性,與arguments一樣也是函數(shù)的內(nèi)部屬性,它是在函數(shù)執(zhí)行時(shí)被生成,那么值呢?this的值始終是指向函數(shù)據(jù)以執(zhí)行的環(huán)境。簡單的可以理解為調(diào)用函數(shù)的對象。
在js中只有兩種作用域,一種是全局,一種是函數(shù)級作用域(可以利用其模仿塊級作用域),直接在對象屬性中使用this那么此時(shí)this就是window,而且還在全局上掛載了一個(gè)name屬性沒有值。
case3,看了前面兩個(gè)的分析,第三個(gè)應(yīng)該就很容易理解了,在cname屬性上使用了a.name而a還沒有完成定義是不能直接使用的,此時(shí)直接給window掛載了一個(gè)變量a還對其進(jìn)行了屬性name的訪問,變量不賦初值是默認(rèn)undefined的,那么你能對一個(gè)undefined進(jìn)行屬性訪問?
嗯,大概就這樣,有不對不嚴(yán)謹(jǐn)?shù)牡胤綒g迎指出。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79176.html
摘要:忍者級別的函數(shù)操作對于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...
摘要:的傳統(tǒng)生成一個(gè)類的方法,需要定義一個(gè)構(gòu)造函數(shù),然后通過的方式生成。定義類父類定義子類,繼承父類可以調(diào)用父類的方法如果子類中有構(gòu)造函數(shù),則必須使用調(diào)用。這是因?yàn)樽宇悰]有自己的對象,而是繼承父類的對象,然后對其進(jìn)行加工。 js的傳統(tǒng)生成一個(gè)類的方法,需要定義一個(gè)構(gòu)造函數(shù),然后通過new的方式生成。 function Cat() { this.name = kitty; th...
摘要:對于新手來說是最令人困惑的部分之一。函數(shù)聲明通過的形式。很明顯的,語言自身定義和函數(shù)形參已經(jīng)處于作用域頂端。這就意味著,函數(shù)聲明比變量聲明具有更高的優(yōu)先級。但是這卻不意味著對這個(gè)名稱的賦值無效,僅僅是聲明的部分會(huì)被忽略而已。 原文鏈接:JavaScript Scoping and Hoisting 你知道下面的JavaScript代碼執(zhí)行后會(huì)alert出什么值嗎? var foo = ...
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗?dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:引用是從匿名函數(shù)內(nèi)部引用自身的唯一方法,不過,最好的方法是避免使用匿名函數(shù),至少在那些需要引用自身的時(shí)候,使用命名函數(shù)或者表達(dá)式。 [翻譯]Chapter1 this or that 第一次翻譯,翻譯的不好,已經(jīng)再盡全力s去翻譯了,如果哪里看不明點(diǎn),請出門左轉(zhuǎn)下邊原文地址 英文原文點(diǎn)擊這里 javascript中最令人困惑的東西就是this關(guān)鍵字,它在每個(gè)函數(shù)作用域中都會(huì)自動(dòng)定義的一個(gè)...
閱讀 4413·2021-11-22 09:34
閱讀 2716·2021-11-12 10:36
閱讀 769·2021-08-18 10:23
閱讀 2661·2019-08-30 15:55
閱讀 3166·2019-08-30 15:53
閱讀 2106·2019-08-30 15:44
閱讀 1384·2019-08-29 15:37
閱讀 1447·2019-08-29 13:04