相关疑难解决方法(0)

javascript关闭优势?

什么是JS 中闭包的主要目的.它只用于公共和私人变量吗?还是有其他我错过的东西.我试图了解关闭,并且真的想知道使用它的主要优点是什么.

javascript closures

17
推荐指数
2
解决办法
2万
查看次数

如果Javascript中的"with"语句创建了一个新范围,为什么每次关闭时此关闭都不包含新范围中的新"x"?

如果withJavascript中的语句创建了一个新范围,那么不应该点击链接显示x不同范围内的不同内容吗?它没有.

<a href="#" id="link1">ha link 1</a>
<a href="#" id="link2">ha link 2</a>
<a href="#" id="link3">ha link 3</a>
<a href="#" id="link4">ha link 4</a>
<a href="#" id="link5">ha link 5</a>


<script type="text/javascript">

    for (i = 1; i <= 5; i++) {

        with({foo:"bar"}) {
            var x = i;
            document.getElementById('link' + i).onclick = function() { alert(x); return false; }
        }

    }

</script>
Run Code Online (Sandbox Code Playgroud)

javascript closures scope

3
推荐指数
1
解决办法
1113
查看次数

Javascript:将局部变量传递给动态创建的函数,该函数是另一个函数内的参数

我正在使用具有以下参数化的函数(无法更改):

my_function(data, callback_function(results, status) {});
Run Code Online (Sandbox Code Playgroud)

我需要将其他信息传递给callback_function,这些信息无法添加到'data'(callback_function使用)或'results'或'status'.具体来说,此信息是my_function调用所在的for循环的计数器.

为此,我在callback_function体内包含对计数器的引用:

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

  var data = 'cannot modify this data';

  my_function(data, function (results, status) { alert(i); });

}
Run Code Online (Sandbox Code Playgroud)

不幸的是,i的最终值(在这种情况下为9)被打印10次.预期的行为是针对要打印的循环(0到9)中的每个i值.

动态函数是否有可能访问其范围之外的变量,但是在它们被定义的范围内?

javascript parameter-passing dynamic-function

3
推荐指数
1
解决办法
4427
查看次数

setTimeout传递参数问题

我正在尝试传递元素索引并使用延迟滑动每个列表项内容

这是我的代码

    for(var i = 1; i <= $("#colContainer li").length ; i++) {
        var el = $("#colContainer li:nth-child(" + i + ") .colContent");

        var delay = function() {
            slide(el);
        };
        setTimeout(delay, 10);
        function slide(el){
            el.slideUp();
        };
    };
Run Code Online (Sandbox Code Playgroud)

但每次只是最后一个滑起来

我期望他们从索引1滑到延迟结束

我也尝试过这个

    index = $(this).parent("li").index();
    for(var i = 1; i <= $("#colContainer li").length ; i++) {
        (function(i) {
            var el = $("#colContainer li:nth-child(" + i + ") .colContent");

            var delay = function() {
            slide(el);
            };
            setTimeout(delay, 10);
            function slide(el){
            el.slideUp();
            };
        })(i); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery settimeout

0
推荐指数
2
解决办法
293
查看次数