Javascript 如何从嵌套匿名函数返回值?

Javascript 如何从嵌套匿名函数返回值?,javascript,jquery,Javascript,Jquery,我有这个JS代码: function paging() { $('.paging li').click(function(e) { $('.paging li a').removeClass("active"); $(this).find('a').addClass("active"); $('#img-grp-wrap img').hide(); var indexer = $(this).index();

我有这个JS代码:

function paging() { 
    $('.paging li').click(function(e) {
        $('.paging li a').removeClass("active");
        $(this).find('a').addClass("active");
        $('#img-grp-wrap img').hide();

        var indexer = $(this).index(); 
        $('#img-grp-wrap img:eq('+indexer+')').fadeIn();    

        e.preventDefault();
        return indexer;
    });
}

var $cur_page = paging();
console.log($cur_page);
我想在函数paging()之外使用indexer值,但当我尝试执行console.log()时,它只是说未定义

我如何构造它,以便可以将我单击的链接的索引值传递到函数外部(这是索引器变量)


我是一名编程新手,请耐心听我说。

听起来你真的不明白事件处理程序是如何工作的。在安装click处理程序时,您告诉系统希望它在将来某个时候发生click时调用此函数。函数
paging()
在单击元素和调用匿名函数之前运行并完成很长时间。因此,
paging()
函数无法返回单击处理程序的结果,因为单击尚未发生

如果您有一些代码想要使用
索引器
值,那么您需要从单击处理程序调用该代码,并将
索引器
的值作为参数传递给正在调用的函数。可能看起来像这样:

$('.paging li').click(function(e) {
    $('.paging li a').removeClass("active");
    $(this).find('a').addClass("active");
    $('#img-grp-wrap img').hide();

    var indexer = $(this).index(); 
    $('#img-grp-wrap img:eq('+indexer+')').fadeIn();    

    e.preventDefault();
    // call a function and pass it the indexer value
    processIndex(indexer);
});

请注意,我还删除了分页函数,因为您不想多次调用它,因为它会再次安装事件处理程序。

听起来您真的不明白事件处理程序是如何工作的。在安装click处理程序时,您告诉系统希望它在将来某个时候发生click时调用此函数。函数
paging()
在单击元素和调用匿名函数之前运行并完成很长时间。因此,
paging()
函数无法返回单击处理程序的结果,因为单击尚未发生

如果您有一些代码想要使用
索引器
值,那么您需要从单击处理程序调用该代码,并将
索引器
的值作为参数传递给正在调用的函数。可能看起来像这样:

$('.paging li').click(function(e) {
    $('.paging li a').removeClass("active");
    $(this).find('a').addClass("active");
    $('#img-grp-wrap img').hide();

    var indexer = $(this).index(); 
    $('#img-grp-wrap img:eq('+indexer+')').fadeIn();    

    e.preventDefault();
    // call a function and pass it the indexer value
    processIndex(indexer);
});

请注意,我还删除了分页函数,因为您不想多次调用它,因为它会再次安装事件处理程序。

正如@jfriend00所说,由于事件处理程序的工作方式,您无法以您的思维方式访问其返回值

但是,您当然可以让他们在外部(例如全局)范围内设置变量,然后让他们触发事件发生后需要运行的任何操作。也可以将值作为参数传递给另一个函数

例如


无法从事件处理程序返回值的原因是脚本运行在负责处理页面上所有其他内容的同一线程上。如果要从理论上为事件处理程序设计一种返回值的方法,则必须在触发事件之前阻止线程。这意味着页面将冻结,直到处理程序与之关联的任何事件发生为止,例如用户单击按钮。

正如@jfriend00所说,由于事件处理程序的工作方式,您无法以您的思维方式访问事件处理程序的返回值

但是,您当然可以让他们在外部(例如全局)范围内设置变量,然后让他们触发事件发生后需要运行的任何操作。也可以将值作为参数传递给另一个函数

例如


无法从事件处理程序返回值的原因是脚本运行在负责处理页面上所有其他内容的同一线程上。如果要从理论上为事件处理程序设计一种返回值的方法,则必须在触发事件之前阻止线程。这意味着页面将冻结,直到处理程序与之关联的任何事件发生为止,例如,用户单击按钮。

好的,我会尝试。正如我在下面所说的,我是一名程序员新手,调用函数和事件处理程序的概念在我的头脑中仍然有些模糊(尽管我理解其中的一些细节)。不管怎样,谢谢。(哈哈,如果我知道事情应该如何运作,那就好笑了,我一开始就不会问这个问题。)@catandmouse-你为什么在3-1/2年后回复我?刚才是什么引起了反应?我很好奇为什么会有最新的评论?好吧,我试试看。正如我在下面所说的,我是一名程序员新手,调用函数和事件处理程序的概念在我的头脑中仍然有些模糊(尽管我理解其中的一些细节)。不管怎样,谢谢。(哈哈,如果我知道事情应该如何运作,那就好笑了,我一开始就不会问这个问题。)@catandmouse-你为什么在3-1/2年后回复我?刚才是什么引起了反应?我很好奇为什么会有最新的评论?