此函数是作为方法分配的还是已经执行的? 来自C++和java,我是一个初学者,有JavaScript。这个代码模式让我感到困惑(在jQuery应用程序中可以找到):

此函数是作为方法分配的还是已经执行的? 来自C++和java,我是一个初学者,有JavaScript。这个代码模式让我感到困惑(在jQuery应用程序中可以找到):,javascript,jquery,Javascript,Jquery,我将如何解读: 创建对象opts,并声明属性drop,但初始化为空。 然后,定义函数(-object)drop。在第二行中,opts对象的drop属性被称为方法。但是,在我看来,opts.drop是空的。所以它不应该是可调用的 这里发生了什么?我是否遗漏了一些重要的代码,或者这是一种有意义的模式 编辑:来源:empty可能是函数名,其实现方式如下: function empty () {} 如果它是null,未定义,一个字符串、一个对象、一个数组等等。。。那就有理由担心了,因为那样会很糟糕 但

我将如何解读: 创建对象
opts
,并声明属性
drop
,但初始化为空。 然后,定义函数(-object)
drop
。在第二行中,opts对象的drop属性被称为方法。但是,在我看来,
opts.drop
是空的。所以它不应该是可调用的

这里发生了什么?我是否遗漏了一些重要的代码,或者这是一种有意义的模式


编辑:来源:

empty
可能是函数名,其实现方式如下:

function empty () {}
如果它是
null
未定义
,一个字符串、一个对象、一个数组等等。。。那就有理由担心了,因为那样会很糟糕

但我的直觉告诉我,如果你寻找它的定义,
empty===function(){}

为了增加混淆,如果
empty
被定义为赋值:

var empty = function () {};
该赋值必须发生在
opts
中引用它的位置上方

但是,如果是声明:

function empty () {}
该函数可以在任何地方声明,包括脚本的底部,因为函数声明是在脚本中任何其他内容之前编译的

编辑

在进行快速检查时,我在不同的范围内看到了一些不同的
函数。
一些正在从数组中删除回调(通过将数组设置为空数组),一些正在从父元素中删除HTML元素,一些正在检查元素是否有子元素


当然,我正在从这个站点查看缩小的源代码,因此可能会有更多的
empty
函数。

通过查看这个,我们可以得出结论,empty不仅仅是一个变量

opts.drop(arg);
这里的下降实际上是通过一个参数,所以

empty是一个接受1个参数的函数

所以
var opts={drop:empty}//只不过是

var opts = { drop : function(argument) {} };

opts.drop
不是“空的”<代码>空
是一个标识符。这意味着它可以是另一个函数,变量,数字,布尔值,任何东西。我们不知道它到底是什么,因为我们看不到在您显示的代码中定义了
empty
,但这并不重要。
opts.drop
可以在任何时候重新定义,因此像这样初始化
drop
函数没有问题。只有在调用
drop()
opts时才会出现错误。drop
不可调用。请尝试:
警报(typeof empty)。如果显示的是
“function”
,则无需担心。在JavaScript中,函数是第一类对象。它们可以像任何其他对象一样作为数据传递。事实上,您甚至可以向它们添加属性并定义其他方法。所以我想我现在理解了这里发生的事情:全局drop确实是一个不同于opts.drop的函数,它可能在其他地方被选择性地更改。使用这种模式,每当调用drop(arg)时,也会调用opts.drop(e),为库用户提供一个锚,以插入他自己的代码作为插件。“当然,我正在从这个站点查看缩小的源代码”。你指的是哪个网站?@Konstantin Stackoverflow。它使用了一个缩小版的jQuery,它似乎是从Google的CDN下载的。我说的是不同的代码,链接到源代码的链接在这里:啊哈。我第一次甚至是对的——在那个文件中,
empty
实际上就是空的。
var opts = { drop : function(argument) {} };