javascript - 使用自调用函数实现变量独立

标签 javascript self-invoking-function self-executing-function

<分区>

Possible Duplicate:
Javascript closure inside loops - simple practical example

我正在尝试使用自调用函数,以便 objects 中的每个函数都将返回不同的消息。

<script type="text/javascript">

    objects = {};

    for( var i = 0; i < 10; i++ ) {

        objects['function'+i] = function () {

            var text = ( function() { return "I am object " + i; } )();

            return text;

        };

    }

    for( var j = 0; j < 10; j++ ) {

        document.write( objects['function'+j]() + "<br>" );

    }

</script>

到目前为止,上面的结果是:

I am object 10

I am object 10

I am object 10

I am object 10

I am object 10

I am object 10

I am object 10

I am object 10

I am object 10

I am object 10

我如何使用自调用函数立即设置消息,而不是绑定(bind)到不稳定的 i

最佳答案

您需要传入迭代器变量,以便您的匿名函数可以将其存储在它自己的激活对象/词法环境中记录(=在它自己的上下文对象中)。

此外,您需要这个匿名函数来包装所有访问点:

objects[ 'function' + i ] = function( i ) {

    var text = function() { return "I am object " + i; };

    return text;

}( i );

关于javascript - 使用自调用函数实现变量独立,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962893/

相关文章:

javascript - JS : Web Workers don't work

javascript - node-http-proxy,如何将新的查询参数传递给初始请求?

java - 自执行的 Java 方法

javascript - this 在自执行函数中的范围

Javascript 适用于 Chrome & Opera & Edge,但不适用于 FireFox 或 IE 11

javascript - RaphaelJS 中图论图的标记节点

javascript - 立即调用箭头函数表达式

java - Spring @Transactional注解: Self Invocation

javascript - JavaScript 中的提升变量

Javascript 范围 : code block vs a code block with a self executing function cacoon