Javascript 传递和分配函数与调用函数

Javascript 传递和分配函数与调用函数,javascript,function,Javascript,Function,我决定发布这个问题,因为我已经在网上阅读了几篇教程&这些教程以不同的方式处理这个主题。 假设我有一个递增计数器的函数: function addCounter() { counter++; } 现在我想调用这个函数,把它的值放到另一个变量中。以下哪种方法是正确的: var newcounter=addCounter()或var newcounter=addCounter? 也许这是一个非常基本的问题,但是,信不信由你,这两种方法都给了我很好的结果,这就是为什么我想知道哪个更好,正常,或

我决定发布这个问题,因为我已经在网上阅读了几篇教程&这些教程以不同的方式处理这个主题。 假设我有一个递增计数器的函数:

function addCounter()
{
    counter++;
}
现在我想调用这个函数,把它的值放到另一个变量中。以下哪种方法是正确的:
var newcounter=addCounter()
var newcounter=addCounter?
也许这是一个非常基本的问题,但是,信不信由你,这两种方法都给了我很好的结果,这就是为什么我想知道哪个更好,正常,或者更好,正确


与setTimeout相同:我使用了
setTimeout(myFunction,1000)
setTimeout('myFunction()',1000)
具有相同的结果,那么,在这种情况下使用哪一个呢?

。该函数不返回任何内容,因此分配其返回值不会起任何作用。类似地,仅仅将函数本身分配给变量也没有任何作用


setTimeout
的情况下,不应传递字符串。您可以直接传递函数(
myFunction
)并调用它,也可以传递匿名函数(这样更容易传递参数),例如
setTimeout(function(){doSomething(123);},1000)

它不能给出相同的结果。在第一种情况下,当您执行
var newcounter=addCounter()时
newcounter变量将接收
undefined
值。JavaScript中的每个函数默认返回未定义的值,除非您通过
return
提供一些值。在第二种情况下,
var newcounter=addCounter将函数对象addCounter的引用插入newcounter。因此,从这一步开始,您可以通过
newcounter()
调用相同的函数

当您使用setTimeout时,会得到相同的结果,因为在第一种情况下,您向setTimeout函数提供了对myFunction的引用,并且setTimeout将在特定的超时时间后运行它。在第二种情况下,您提供了一个字符串,该字符串将在超时后像
eval
一样进行计算。不建议使用第二种情况的原因是,在某些情况下,eval功能要慢得多,而且不太安全。
读取

newcounter=addCounter()
newcounter=addCounter应该产生非常不同的结果。我设置了一个

newcounter=addCounter()

这将
addCounter
的返回值分配给
newCounter
。变量
计数器
递增,不返回任何内容。由于
addCounter
不返回任何内容,
newcounter
的值为
undefined
。当我试图调用
newCounter()
时,我得到一个明显的错误

newcounter=addCounter

这将函数
addCounter
分配给
newCounter
。本质上,创建一个指向函数的指针,如果您想证明它,调用
newCounter.toString()
返回
addCounter
的函数文本

调用
newCounter()
将执行
addCounter
并递增
counter


与前两种应答状态一样,不赞成使用字符串版本的
setTimeout
。您需要执行以下操作以每秒递增计数器

setTimeout(addCounter, 1000);

.我非常怀疑
var newcounter=addCounter()给出与
var newcounter=addCounter相同的结果var newcounter=addCounter实际上不会执行该函数。它会将函数分配给
newcounter
var。是吗?你的答案不对。不返回值的函数返回未定义的值@迪马库兹米奇,没关系。假设它返回一些值,那么我上面的理解是正确的?@Ali.NET我的评论指的是主要答案。你的评论是准确的。我知道variable=function();是正确的,但是,我使用ajax的另一种方法&它工作得很好。我的意思是,我没有使用onreadystatechange=function(){…},而是使用onreadystatechange=ajaxReady和下面定义的函数&没有括号,效果非常好。事实上,我唯一一个在函数中没有使用括号来获取UTC时遇到问题的地方,但是其余的都是在没有()的情况下定义的&工作,所以,我快疯了。但是,正如您所说()更好,从现在起我将使用它们,尽管其他方法在大部分情况下都有效。