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

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

js閉包的一個問題。。。

js閉包的一個問題。。。

var?i?=?2; function?outFun()?{ ????var?i=1; ????return?function?()?{ ????????return?i; ????} } console.log(outFun()());為什么上面的這段代碼輸出的結果是1?var?name?=?"The?Window"; var?object?=?{ ????name:?"My?object", ????getNameFunc:?function()?{ ????????return?function()?{ ????????????return?name; ????????}; ????} } console.log(object.getNameFunc()())?這段代碼,我的想法是:這個應該是個閉包,調用object.getNameFunc()返回的結果是一個閉包函數,同時會帶著包含全局變量對象和object變量對象和getNameFunc的變量對象的作用域鏈出來。在window中運行,生成一個window的活動對象,推到作用域鏈的前端。在返回name時候先查找活動對象中所以就返回了“The?Window”。這是我對這段代碼的理解。我把這個思路套到上面那段代碼中應該是返回2啊,為什么返回了1???這兩個函數有什么不同嗎?求大佬解答。。。謝謝、+++++++++++++++++++++++評論區里沒換行的代碼++++++++++++++++++++++++++var?name?=?"The?Window"; var?object?=?{ ????age:18, ????name:?"My?object", ????getNameFunc:?function()?{ ????????var?name?=?"i?am?name"; ????????return?function()?{ ????????????return?name; ????????}; ????} }; var?nameFunc?=?object.getNameFunc(); console.log(nameFunc.call(object)); console.log(nameFunc());
查看完整描述

1 回答

?
qq_藥藥_0

TA貢獻52條經驗 獲得超27個贊

object.getNameFunc()執行后返回一個匿名函數:

function()?{

????return?name;

};

這段代碼可以簡化為

var?name='The?window';
console.log((function?()?{
????return?name
})())

匿名函數并沒有綁定到任何一個對象中。你可以簡單的理解為,普通函數執行,通過作用域鏈訪問到了全局變量值。因為你這里也沒有this,也不存在this指向問題;

查看完整回答
反對 回復 2018-10-06
  • 小熊熊HELLO
    小熊熊HELLO
    謝謝,那個我還有個疑問。就是在getNameFun這個函數返回的匿名函數是不是一個閉包函數?以及函數返回的時候有沒有帶著作用域鏈一起返回?
  • 小熊熊HELLO
    小熊熊HELLO
    可能剛才回復的表述不大清楚。 我的意思是想問,這個返回的匿名函數是不是也包含著object中的name屬性,只是訪問不到。。。
  • qq_藥藥_0
    qq_藥藥_0
    首先抱歉我昨天沒有仔細看你的那個題,回復的有點問題;昨天那個我當this處理了,是錯誤的;首先函數之間的作用域只有全局和函數作用域;也就是你所想的object中的那個name其實一點用都沒有;函數的變量只會循著函數作用域尋訪到全局; var name = "The Window"; var object = { name: "My object", getNameFunc: function() { var name='hello world' return function() { return name; }; } } console.log(object.getNameFunc()())//hello world 執行這個匿名函數,他會先去看看自己有沒得name,沒有再去看看上級函數getnamefunc有沒得,還沒有再去看看全局。你看看懂了沒有
點擊展開后面5
  • 1 回答
  • 0 關注
  • 1050 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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