I完全理解当您调用这样的匿名函数时:
var assign_Function = function() { *code here...*; }
// You can now use it like this:
assign_Function();
对于对象,
A={first_Property:12, second_Property:15}; // Object literal syntax
A.third_Property: function() { *code here...*; }
A.third_Property(); // Call the method
但是,当function()被放入一个方法(或括号)中,然后被分配给一个变量时,会发生什么呢?像这样:
var x = setInterval(function() { *some code here*...; }, 1500);
x现在是x()吗?
否。x
现在是您调用的函数的返回值。在您的情况下,您调用了setInterval()
,它返回一个间隔的ID,稍后可以使用clearInterval()
清除该ID。
var x = setInterval(function() { *some code here*...; }, 1500);
// Later in your code...
clearInterval(x); // Stops the interval from continuing to repeat
这与从不同的函数返回值没有什么不同
function returnSomething() {
return 'test';
}
var y = returnSomething(); // y is now "test"
但是,当function()被放入一个方法(或括号)中,然后被分配给一个变量时,会发生什么呢?
在这种情况下,函数表达式在求值时返回一个函数对象。然后将函数对象传递给周围的代码。例如:
var fn = function(){/* body */};
bar(fn);
实际上与写作相同:
bar(function()/* body */});
唯一的区别是,在第一种情况下,引用存储在fn中的函数对象,但在第二种情况下不保留引用。在这两种情况下,bar都有效地传递了一个函数对象作为参数。
在以下情况下:
var x = bar(…);
则根据bar的返回值为x分配一个值,它不引用传递给bar的参数。
x
是一个变量而不是函数,因为setInterval
的返回类型不是函数而是Interval Id。