1

我有以下功能的 js 文件(rework.js)

/**
 * Java script functions to set comments for selected rework reason.
 */
function setReworkCheckFields() {
    var note = $("#rework_note").val();
    var reworknoteImage = document.getElementsByName("reworknote_image");
    var reworknoteScript = document.getElementsByName("reworknote_script");
    var reworknoteVoice = document.getElementsByName("reworknote_voice");
    var reworknoteMusic = document.getElementsByName("reworknote_music");
    if ($(reworknoteImage).is(':checked')) {
        $("#reworknote_image_note").val(note);
    }
    if ($(reworknoteScript).is(':checked')) {
        $("#reworknote_script_note").val(note);
    }
    if ($(reworknoteVoice).is(':checked')) {
        $("#reworknote_voice_note").val(note);
    }
    if ($(reworknoteMusic).is(':checked')) {
        $("#reworknote_music_note").val(note);
    }
}

我已经在 html 中导入了这个 js 文件,并且我在 html 中添加了具有不同实现的相同方法,如下所示

<script type='text/javascript' src='style/js/rework.js'></script>

<script type='text/javascript'>
function setReworkCheckFields() {
    var note = $("#rework_note").val();
    var reworknoteImage = document.getElementsByName("reworknote_image");
    var reworknoteScript = document.getElementsByName("reworknote_script");
    var reworknoteVoice = document.getElementsByName("reworknote_voice");
    var reworknoteMusic = document.getElementsByName("reworknote_music");
    if ($(reworknoteImage).is(':checked')) {
        $("#reworknote_image_note").val(note);
    } else {
        $("#reworknote_image_note").val(null);
    }
    if ($(reworknoteScript).is(':checked')) {
        $("#reworknote_script_note").val(note);
    } else {
        $("#reworknote_script_note").val(null);
    }
    if ($(reworknoteVoice).is(':checked')) {
        $("#reworknote_voice_note").val(note);
    } else {
        $("#reworknote_voice_note").val(null);
    }
    if ($(reworknoteMusic).is(':checked')) {
        $("#reworknote_music_note").val(note);
    } else {
        $("#reworknote_music_note").val(null);
    }
}
</script>

并调用下面的javascript函数。

<table>
     <tr>
         <td>Image: <input type="checkbox" name="reworknote_image" ${reworknote_image.workingchecked} onchange="setReworkCheckFields()"/></td>
         <td>Script: <input type="checkbox" name="reworknote_script" ${reworknote_script.workingchecked} onchange="setReworkCheckFields()"/></td>
         <td>Voice: <input type="checkbox" name="reworknote_voice" ${reworknote_voice.workingchecked} onchange="setReworkCheckFields()"/></td>
         <td>Music: <input type="checkbox" name="reworknote_music" ${reworknote_music.workingchecked} onchange="setReworkCheckFields()"/></td>
     </tr>
</table>

有人可以知道流程将如何运作。这有效吗?

4

2 回答 2

1

第二个函数将重新声明第一个函数,因此当您调用时,setReworkCheckFields()您将运行第二个函数。

是的,它是有效的。就像您覆盖变量一样。

请记住,如果您在代码中再次声明此函数,它也会重新声明此定义。在某些情况下这是有用的行为,但你必须小心重新声明 js 函数。

于 2013-03-20T09:22:42.200 回答
1

否 - 流程是在 js 范围内仅定义最后一个函数,因为它会覆盖任何具有相似名称的 js 代码。

在 javascript 中没有像 Java 或其他语言那样的函数重载。不过,您可以将代码包装到不同的命名空间:

var MyFirstNameSpace = {
    setReworkCheckFields: function(){
         // code goes here...
    } 
};

var MySecondNameSpace = {
    setReworkCheckFields: function(){
         // code goes here...
    } 
};

那么您可以调用 MyFirstNameSpace.setReworkCheckFields() 或 MySecondNameSpace.setReworkCheckFields();

一般来说,覆盖 javascript 全局范围不是一个好习惯,因为您不知道您的项目将包含哪些其他 js 代码,这会与您自己的代码混淆。

于 2013-03-20T09:22:56.033 回答