添加参数时调用javascript函数停止工作,这真的不大声吗



当我删除匿名函数并直接调用函数时,它仅在没有参数的情况下有效。

工程。使用参数,在匿名函数内:

$(document).ready(function () {
    $('#someId').on('click', function () {
        setAllOn(checkOn)
    });
});
function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}

作品。没有匿名函数,但只有没有参数:

$(document).ready(function () {
    $('#someId').on('click', setAllOn);
});
function setAllOn() {
    $("#someId2 input[name='someName']").attr('checked', true);
}

不工作。添加了一个参数,现在它不起作用:

$(document).ready(function () {
    $('#someId').on('click', setAllOn(true));
});
function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}
您需要

on传递回调,即触发事件时要调用的函数。

setAllOn是一个函数。这就是它起作用的原因。

function () { setAllOn(checkOn) }仍然是一个功能。

setAllOn(true)是调用函数setAllOn的结果。由于它不返回任何内容,因此结果undefined 。这不是一个函数。

如果要重用setAllOn函数。您可以定义一个高阶函数,接受参数并返回 setAllOn 的"柯里德"版本。

function setAll(checkOn){
    return function(){ return setAllOn(checkOn);}
}
function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}
$(document).ready(function () {
    $('#someId').on('click', setAll(true));
});

最新更新