Javascript中函数作为函数和函数作为引用的区别
我试图学习JavaScript,但无法理解以下代码行之间的区别Javascript中函数作为函数和函数作为引用的区别,javascript,Javascript,我试图学习JavaScript,但无法理解以下代码行之间的区别 var f = myfunction; var k = myfunction(); function myFuncton() { alert("hello world"); } 因为我们不能用像C#这样的托管语言来做这样的事情。但是我看到过很多JavaScript代码示例,其中一个函数被分配给一个变量,在分号(;)之前没有开括号和闭括号,然后同一个函数被分配给另一个变量,带有开括号和闭括号,如上面的代码所示。这两个赋
var f = myfunction;
var k = myfunction();
function myFuncton()
{
alert("hello world");
}
因为我们不能用像C#这样的托管语言来做这样的事情。但是我看到过很多JavaScript代码示例,其中一个函数被分配给一个变量,在分号(;)之前没有开括号和闭括号,然后同一个函数被分配给另一个变量,带有开括号和闭括号,如上面的代码所示。这两个赋值之间的区别是什么?为什么我们要在JavaScript中这样做?类似这样的赋值中的括号:
var k = myfunction();
这意味着分配给k
的不是函数本身,而是调用函数的结果,换句话说,函数的返回值
如果没有括号,则实际上是将函数的引用指定给某个变量:
var f = myfunction;
完成此操作后,可以使用以下任一名称调用函数:
f(); // same as myfunction();
JavaScript中的函数只是一种特殊类型的对象,但在大多数情况下它们实际上只是对象。它们可以有属性,对它们的引用可以完全按照传递对象引用的方式传递
函数的特殊之处在于可以调用它。对函数的引用后跟
()
(或带有参数的()
)是函数调用,无论该引用来自何处。这就是为什么将函数调用赋值给变量,或在调用其他函数时将函数引用作为参数传递给其他函数是有用的。赋值中的括号如下:
var k = myfunction();
var f = myfunction;
这意味着分配给k
的不是函数本身,而是调用函数的结果,换句话说,函数的返回值
如果没有括号,则实际上是将函数的引用指定给某个变量:
var f = myfunction;
完成此操作后,可以使用以下任一名称调用函数:
f(); // same as myfunction();
JavaScript中的函数只是一种特殊类型的对象,但在大多数情况下它们实际上只是对象。它们可以有属性,对它们的引用可以完全按照传递对象引用的方式传递
函数的特殊之处在于可以调用它。对函数的引用后跟()
(或带有参数的()
)是函数调用,无论该引用来自何处。这就是为什么将函数调用赋值给变量,或者在调用其他函数时将函数引用作为参数传递是有用的
var f = myfunction;
这将创建一个新变量f
,该变量引用myfunction
var k = myfunction();
这将创建一个变量k
,该变量被分配调用并执行myfunction()
后产生的值
这将创建一个新变量f
,该变量引用myfunction
var k = myfunction();
这将创建一个变量
k
,该变量被赋值为调用并执行myfunction()
后产生的值。事实上,我知道,但赋值给变量f更让我困惑。@user2913184我刚刚更新了答案;我还要补充几个字。事实上,我知道,但变量f的赋值对我来说更混乱。@user2913184我刚刚更新了答案;我还要补充几个词。OFC你可以用不同的语法在C#中做这两件事(即将函数引用赋给变量,而将函数调用的结果赋给变量);在c#中,这是如何在c#中声明变量以保存函数引用的方法:public delegate int OperationDelegate(int p);公共类MyClass{private int Square(int p){return p*p;}public void Run(){OperationDelegate func;func=Square;func(10);func=i=>i*100;func(10);}
OFC,这两种操作都可以在C#中完成(即将函数引用赋值到变量中,而将函数调用的结果赋值到变量中)只是用不同的语法..你能分享一些代码来说明如何实现相同的东西,比如var f=myfunction;在c#中,这是如何在c#中声明变量以保存函数引用的方法:public delegate int OperationDelegate(int p);公共类MyClass{private int Square(int p){return p*p;}public void Run(){OperationDelegate func;func=Square;func(10);func=i=>i*100;func(10);}