[如MDN中关于闭包的代码所示](闭包 - JavaScript | MDN (mozilla.org)):
function showHelp(help) {
document.getElementById('help').innerHTML = help;
}
function makeHelpCallback(help) {
return function() {
showHelp(help);
};
}
function setupHelp() {
var helpText = [
{'id': 'email', 'help': 'Your e-mail address'},
{'id': 'name', 'help': 'Your full name'},
{'id': 'age', 'help': 'Your age (you must be over 16)'}
];
for (var i = 0; i < helpText.length; i++) {
var item = helpText[i];
document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
}
}
setupHelp();
这里可以用执行上下文配合执行栈解释,当.onfocus事件触发时,for循环已经结束。相应打印的结果就一直是Your age (you must be over 16)。
那么如何用执行栈和执行上下文解释更换声明let、const后问题解决了呢?
已知:当进入循环后块作用域顺序运行不产生上下文,此时let、const声明的值被记录在了哪里?
闭包又是如何查找到正确的结果呢?
恳请各位大佬不吝赐教,MDN原来的解答并不能说服我自己T_T