函数作为参数与处理程序JS



我正在学习JS和JQuery。我想知道为什么这个代码在窗口加载时返回9?

$(document).ready(function(){
    function foo(a){
        console.log(a *= a);
    };
    $('#btn').click(foo(3));
}); 

为什么它的作用与标准处理程序不同?

$('#btn').click(function(){
    foo(3);
});

这里实际发生的是有两种不同的情况:

想象一下,或者实际打开浏览器的控制台,将这些片段粘贴到中

好的,如果不是$(elem).click,而是以下函数:

function bar(){
    console.log(parameters);
}

parameters是一个关键字,用于打印传递给函数的所有参数

此外,想象一下foo是这样的:

function foo(a){
    return a * a;
};

=运算符是不必要的,因为a无论如何都会立即丢弃

现在,如果我调用bar函数,比如:

bar(foo(3));

则CCD_ 7将返回CCD_。

因为foo在被传递给bar之前就已经被执行了。

而在中,以下内容:

bar(function(){
    foo(3);
});

您会发现bar将返回function(){foo(3)},因为它没有在参数中执行,而是传递函数引用,而foo(3)传递函数结果。

所以说,如果你想让它在控制台上的按钮上打印9,你可以这样做:

$(document).ready(function(){
    function foo(a){
        console.log(a *= a);
    };
    $('#btn').click(function(){
        foo(3);
    });
}); 

相关内容

  • 没有找到相关文章

最新更新