调用函数的区别是:
testCall: function()和function testCall()在jQuery?
更新:
问题:的使用是否存在一些性能问题,OR,您使用的是哪一种?
更新2
另外,我注意到,当我使用testCall: function()定义函数时,我使用this.testCall()调用它,它可以很好地工作,并且能够在任何其他函数中调用它。
但是,当我使用function testCall()时,我试图在另一个函数中使用testCall()来调用它,而不是得到错误,并且无法调用它。这是可能的,还是可能有其他原因的errors?
发布于 2010-04-16 16:29:22
在本例中:
testCall: function()testCall现在是您所在的对象上的一个可用函数,如:object.testCall() --如果需要,它可以访问该对象中的其他函数、属性等。
在这个版本中:
function testCall()testCall只是一个全局可用的方法,而不是对象或插件的作用域,无论您处理什么,您都可以在任何地方调用它,比如:testCall()
发布于 2010-04-16 16:31:35
这实际上是一个关于Javascript语法(和语义)的问题,而不是jQuery。
这两个构造都定义了函数。这是:
var x = {
// ...
name: function() { /* ... */ },
// ...
};定义一个函数(一个匿名函数),并将其赋值为分配给变量"x“的对象中名为"name”的属性的值。
这是:
function name() {
/* ... */
}定义一个名为" name“的函数。其效果类似于:
var name = function() { /* ... */ };但绝对不同于。然而,在大多数情况下,认为它们几乎相同是安全的。其结果是"name“被绑定到词汇包围范围中的函数。如果在任何其他函数之外执行该定义,则"name“将成为"window”对象的属性,因此该函数是全局可用的。如果该声明位于另一个函数中,则"name“仅在该函数中可用。
通常,在为某些jQuery工具设置回调(如UI插件或$.ajax )时,您会看到第一个表单。您为jQuery提供了一个它应该调用的函数-- AJAX调用完成,或者鼠标单击之类的使用操作,或者某种动画的完成。
编辑哦,最后这里是另一个注意事项。如果您用第二种方式定义函数,那么您可以通过名称引用该函数,并在对象定义中使用它(如第一个示例):
function globalFunction() {
function localFunction() { /* ... */ };
jQuery.something({
x: 100, y: 100,
callback: localFunction,
// ...
});
}还有更多这样的事情是可能的--函数是Javascript中的值,可以像数字和字符串一样轻易地抛出。
发布于 2010-04-16 17:57:05
第一个(testCall: function())是用于定义函数并将其赋值给对象上的属性的对象文字表示法(未显示)。函数本身是匿名的;它绑定到的属性有一个名称,但函数没有。
第二个(function testCall())是一个命名函数。
命名函数与匿名函数相比有几个优点,因此尽管您看到了第一种格式,但我建议您尽量少使用它。工具(调试器等)可以有效地报告命名函数,而匿名函数只显示为?或(anonymous)。更多在这里。
因此,而不是这样:
function doSomeNiftyAjaxyThing(foo) {
$.ajax({
url: "blah",
success: function() {
// Do something involving the successful result and `foo`
foo.bar();
}
});
}我通常会这样做:
function doSomeNiftyAjaxyThing(foo) {
$.ajax({
url: "blah",
success: niftySuccess
});
function niftySuccess() {
// Do something involving the successful result and `foo`
foo.bar();
}
}这不仅使我的代码更加清晰(呃,在我的脑海中),而且这意味着如果niftySuccess内部出了问题,我已经给这个函数取了一个我的工具可以向我报告的名称。注意,除了函数有一个名称之外,它们是相同的--这两个函数都是foo参数的闭包,以及doSomeNiftyAjaxyThing中的其他任何函数。
您可能会倾向于为该函数提供内联名称,如下所示:
function doSomeNiftyAjaxyThing(foo) {
$.ajax({
url: "blah",
success: function niftySuccess() { // <== change here, PROBLEMATIC
// Do something involving the successful result and `foo`
foo.bar();
}
});
}在这里,您要声明一个函数的名称作为表达式,并将表达式的结果赋值给属性。可以说,您应该能够做到这一点,但是在不同的Javascript引擎中有一系列的implementation...anomalies可以阻止您这样做。(在上面链接的文章中以及在这篇文章中有更多信息。)
https://stackoverflow.com/questions/2654566
复制相似问题