未捕获的TypeError:对象不是“(function($)”上的函数

时间:2014-07-30 19:13:10

标签: javascript jquery

为什么我会收到以下错误...

Uncaught TypeError: object is not a function

...在某一JS脚本的下一行?

(function($){

为什么只有在连接JS时才会出现错误? (我正在使用Gulp)

如果我在该行之前添加;,为什么它会起作用呢?

;(function($){

更新

前一行 - 也就是说,根据运行时错误,在连接脚本上的不是函数的对象是},如:

storage = {
   //...
}

我以前总是用分号,但不是花括号后。

事实证明,花括号可以分隔语句的结尾,就像在这种情况下一样,然后建议使用分号来避免此错误。 Here是一个很好的解释。

2 个答案:

答案 0 :(得分:3)

Javascript忽略缺少的分号并尝试解释它。因此,如果您不输入分号,则使用下一行来查看它是否应该结束该行或将其链接。

允许你使用这样的东西:

String
.split();

它将被解释为:

String.split();

,这也有效:

String
.split
();

现在,如果你有这样的事情:

var a = 'a';
var b = a
(function(){})

JavaScript无法知道你真正想做什么,所以它会解释它:

var a = 'a';
var b = a(function(){});

给你错误[place object type here] is not a function

底线,总是放下你的分号。


修改

看到你的代码后,在这里解释它:

storage = {/**/}(function($){})(jQuery);

所以Object{} === Object)不是function

答案 1 :(得分:1)

连接时,它会认为您正在尝试拨打(function($) {...}之前的任何内容。

如果您在引用后放置(),它会尝试调用引用的任何内容。这就是为什么您会在代码之前看到很多JavaScript库只有一个;