My$.extend在javascript中的函数中似乎不起作用

My$.extend在javascript中的函数中似乎不起作用,javascript,jquery,Javascript,Jquery,我有以下代码: File 1: $(document).ready(function () { addDataTableExts(); } File 2: function addDataTableExts() { $.extend($.fn.dataTableExt.oStdClasses, { sWrapper: 'no-margin last-child' } } 这似乎很管用。我现在尝试用以下内容替换此内容: File 2: (function ()

我有以下代码:

File 1:
$(document).ready(function () {
   addDataTableExts();
}

File 2:
function addDataTableExts() {
   $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
   }
}
这似乎很管用。我现在尝试用以下内容替换此内容:

File 2:
(function () {

    $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
    }
}
这不管用

有没有什么原因可以解释为什么只有我第一次这样做才有效?我想 如果更改文件2的第一行,则会导致代码
执行时没有我调用它。

您将代码从在
ready
事件中运行更改为立即运行。在加载文件2之后,您似乎正在加载datatable插件,因此当您尝试使用它时,该插件还不存在

如果将其放回
ready
事件中,它应该可以工作:

File 2:
$(document).ready(function () {

  $.extend($.fn.dataTableExt.oStdClasses, {
    sWrapper: 'no-margin last-child'
  }

});
注意:jQuery中的事件不是独占的,因此在同一页面中可以有多个
ready
事件处理程序,而不会出现问题

“我认为通过更改文件2的第一行,它将导致代码在我不调用它的情况下执行。”

如果您实际上只更改了第一行,如图所示,那么您创建了一个语法错误-您添加了一个开头
,没有结尾
。但是简单地添加结束符
不会导致现在的匿名函数表达式被执行。如果希望代码在不从文件1调用的情况下执行,则需要在末尾添加额外的括号
()
,以实际调用函数

另外,在
$.extend(…
结尾处的
}
之后,您还有一个缺少的结束
,尽管这也是代码的第一个版本中的一个问题(也是文件1中的文档就绪处理程序的问题)

(函数(){
$.extend($.fn.dataTableExt.ostdclass{
sWrapper:“无边际最后一个孩子”

});//嗨。谢谢。这只是我的问题格式错误。很抱歉。我会解决的。你打算很快解决吗?正确显示出不起作用的东西对问题很重要。你是不是忘了发布结束语()
在文件2中,还是这就是你的错误来源?@Bergi:她上面的评论是在我的评论中回复的,在问题发布后的几秒钟。我想我不应该在她回复时删除它,直到她真的做到了,因为我们已经过了10分钟,她还没有费心去纠正它。在我看来,不是吗他“不是一个真正的问题”,而且浪费了人们的时间,直到/除非她真的发布了(正确的)代码不起作用。似乎没有任何理由等待在文档就绪时运行数据库代码,是吗?我建议只需订购脚本,以便在文件2之前加载数据库插件。没有理由推迟可以在就绪事件之前运行的JS,IMHO。@AHM:这是一个很好的观点。我想说明区别在代码之间,以及如何使其以最小的更改工作相同,但是如果可以重新安排加载以便更早地加载插件,那么这当然是一种更好的方法。
(function () {
    $.extend($.fn.dataTableExt.oStdClasses, {
        sWrapper: 'no-margin last-child'
    });    // <-- add missing ); here
})();      // <-- add missing )(); here