JavaScript:理解函数语法和参数

4

我正在尝试理解bootstrap-multiselectonchange事件。特别是,我正在尝试理解函数语法和参数。

$('#example-onChange').multiselect({
     onChange: function(option, checked, select) {
            alert('Changed option ' + $(option).val() + '.');
           }
});

如何了解函数中的三个参数是什么意思?我应该从哪里获取这三个参数?我也试图查看代码https://github.com/davidstutz/bootstrap-multiselect/blob/master/dist/js/bootstrap-multiselect.js#L263,但无法理解其含义。
我知道使用警报来确定此函数中的选项是指所选选项,checked表示选项是否被选中取消选中。在函数内部执行console.log(select)时,我一直得到undefined,不确定这是什么意思。 问题:如何理解函数参数和语法,例如这些参数?这只是一个示例,但了解通用过程将有助于我在将来解码其他类似的函数。
2个回答

3
简而言之,似乎该库实际上并未提供select选项。

通常在文档不够精确的情况下,我经常采用的技巧是使用console.log来输出arguments,然后检查每个参数的样子。

在这种情况下,执行以下操作:

$('#example-onChange').multiselect({
    onChange: function(option, checked, select) {
        console.log(arguments);
    }
});

...我得到了以下输出:

enter image description here

从这里可以看出提供了两个参数。第一个是被点击的选项的jQuery对象。第二个(可以假设)是一个布尔值,表示该选项是否被选中。

您还可以看到没有提供select(第三个参数)。


你可以采取另一种方法,像你之前做的那样搜索源代码;但我建议找到函数被调用的地方,而不是定义的地方。通过在源代码中搜索onChange,你可以看到onChange至少被调用了3次。

  1. this.options.onChange($option, checked); - 当前没有提供第三个参数。
  2. this.options.onChange($option, true); - 当前没有提供第三个参数。
  3. this.options.onChange($option, false); - 当前没有提供第三个参数。

...... 这里至少提到了三次,因为有时(特别是在大型库中),开发人员可能会以各种奇怪和美妙的方式掩盖它们,从而很难找到所有调用站点。


你可以使用其他技巧:

  1. 在处理程序函数内设置断点(使用开发工具的“断点”功能或通过debugger语句),触发处理程序,然后跟随调用栈(再次使用开发工具)检查调用站点,并查看提供的变量。

  2. 在相应的GitHub项目上开启问题。你会发现很多库所有者都非常乐意帮助。


感谢您提供这么详细的解释。console.log(arguments) 确实非常有用。 - The Wanderer

1

不幸的是,所有的Javascript库都必须有非常强大的文档。

此外,Javascript是一种动态类型语言,因此没有关于形式参数所需类型的信息。没有良好的文档使得库更难理解。

为了快速理解和经验,可以使用一些思考机制。例如,事件委托的参数提供有关其发生元素的信息。就像这些参数是返回给您的值。

在您的示例中,有可能选项、选中和选择与multiselect中#example-onChange中定义的选项元素相关(onChange)。

示例1:

onClose:function(success)
{
    //TODO
}

在这种情况下,“成功”应该意味着:如果关闭我的元素成功,则此参数为true,否则“成功”为false。
示例2:
afterSave:function(success,filename){

}

在这种情况下,“filename”应该是执行保存操作后保存元素的文件名。
我尽力写正确的英语,希望它能被理解。

就好像这些参数是返回给你的值一样--这是一个非常好的建议!! 谢谢。 - The Wanderer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接