gpt4 book ai didi

来自 John Resig #62 和 #63 的 JavaScript Broken Closures 和 Wrapper Function

转载 作者:行者123 更新时间:2023-12-04 06:30:57 24 4
gpt4 key购买 nike

下面的第一个示例是 John Resign 的 Learning Advanced JavaScript 中的 #62 http://ejohn.org/apps/learn/#62 .它被称为修复损坏的闭包。示例 1 失败了 4 次。示例 2 不同,只是因为它有一个包装函数,通过了 4 次。这是来自同一教程的示例 #63

有人可以解释一下吗

1) 为什么 i == count++在示例 1 中失败。

2) 为什么i == count++在包装函数的帮助下传递。包装函数如何改变事物以使其工作?

提前致谢。

示例 1

var count = 0; 
for ( var i = 0; i < 4; i++ ) {
setTimeout(function(){
assert( i == count++, "Check the value of i." );
}, i * 200);
}

示例 2
var count = 0; 
for ( var i = 0; i < 4; i++ ) (function(i){
setTimeout(function(){
assert( i == count++, "Check the value of i." );
}, i * 200);
})(i);

最佳答案

  • i在循环中递增的可能性很大,每次 setTimeout回调被调用 i 的值将是 4。
  • 包装函数引入了一个允许参数值 i 的新作用域。保持其值(value),即使周围i由循环递增。

  • function outerScope() {
    var x = 2, y = 3;

    function innerScope() {
    var x = 3;

    // Obviously this alerts 3.
    alert(x);

    // Since we have no 'y' defined, alert the value 3 from the outer scope.
    alert(y);
    }

    // Introduce a new scope.
    innerScope();

    // Since we have left the inner scope x is now 2.
    alert(x);

    // Obviously this alerts 3.
    alert(y);
    }

    关于来自 John Resig #62 和 #63 的 JavaScript Broken Closures 和 Wrapper Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428104/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com