我完全理解,当你调用这样的匿名函数时:
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()?
答案 0 :(得分:3)
没有。 x
现在无论返回值来自您调用的函数。在您的情况下,您调用setInterval()
,它返回间隔的ID,稍后可以使用clearInterval()
清除。
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"
答案 1 :(得分:1)
但是当将function()放入方法(或括号)中然后将其分配给变量时会发生什么?
在这种情况下,它是FunctionExpression,在评估时,返回一个函数对象。然后将函数对象传递给周围的代码。例如:
var fn = function(){/* body */};
bar(fn);
实际上与写作相同:
bar(function()/* body */});
唯一的区别是,在第一种情况下,对 fn 中存储的函数对象的引用,但在第二种情况下,不保留引用。在这两种情况下, bar 都会有效地传递一个函数对象作为参数。
以下情况:
var x = bar(…);
然后 x 根据 bar 的返回值分配一个值,它不会引用传递给 bar 的参数。
答案 2 :(得分:0)
x
是一个不是函数的变量,因为setInterval
的返回类型不是函数,而是一个区间ID。