亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript返回JSON的對象的原型鏈問題

Javascript返回JSON的對象的原型鏈問題

BIG陽 2018-09-03 13:13:18
1.自己寫著玩的代碼,一個返回一個JSON對象的函數:var somebody = function(arg1, arg2){    var name = arg1;    var age = arg2;    var setName = function(arg3){         name = arg3;     }    var getName = function(){        return name;     }    var setAge = function(arg4){         age = arg4;     }    var getAge = function(){        return age;     };    return {setName:setName,getName:getName,setAge:setAge,getAge:getAge}; } rose = somebody("rose",15); jack = somebody("jack",21); rose.setAge(17);console.log(jack.getAge(),rose.getAge());結果是21 17請問為什么JSON中只存儲了函數引用,rose和jack卻可以擁有各自的值?Javascript的原型鏈在這里怎么理解?
查看完整描述

1 回答

?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

這個問題其實追根到底還是閉包的問題。 和原型鏈并無關系。

想想閉包的原理是什么?

當一個函數在調用時,引用了不是自己作用域內定義的變量(通常稱其為自由變量),則形成了閉包;閉包是代碼塊和創建該代碼塊的上下文中數據的結合。

因而在執行函數somebody后,因為函數setName之類的依舊引用somebody作用域的變量name,age,因而變量name,age并未銷毀。 
仔細想一下, return function(){} 和 return {a:function(){},b:function(){}} 有什么區別呢?


查看完整回答
反對 回復 2018-10-08
  • 1 回答
  • 0 關注
  • 676 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號