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());
js閉包的一個問題。。。
小熊熊HELLO
2018-10-05 15:17:04