繁体   English   中英

调用函数的不同方法-Javascript

[英]Different ways to invoke functions - Javascript

我对javascript中的函数调用有些困惑。 在不同的上下文中有多种方法来调用函数。 通常,我已经看到了这两种调用函数的方法。

方法1:

 $scope.test = function(){
       alert("function invoked");
 }();

方法2:

 $scope.test = function(){
       alert("function invoked");
 }
 $scope.test();

但是,我想知道:

以下代码在性能方面有什么不同?
其他标准,我应该在什么情况下选择这些标准?

我浏览过很少的博客,但无法正确理解。

有很大的不同。

第一个示例创建一个匿名函数,并将$scope.test设置为该函数的返回值 由于该函数不返回任何内容,因此方法一将$scope.test设置为undefined

方法2实际上将$scope.test设置$scope.test一个函数,然后调用它。

 var f1 = function(){ alert("You'll see this right away! the function is called directly after definition") }() alert(f1) var f2 = function(){ alert("f2 has been called") } alert("note, f2 hasn't been actually _called_ yet, just defined."); f2(); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

这两个是不同的。 第一个将函数的返回值分配给$scope.test ,而第二个将函数的定义分配给$scope.test

在正常情况下,我真的没有看到很多人会使用方法1。 但这就是我看到这两者之间的差异的方式:

在方法1中, $scope.test存储调用的函数的返回值,该函数隐式返回undefined ,因此$scope.testundefined

在方法2中, $scope.test实际上存储了对该函数的引用,您可以随时使用$scope.test()调用它,但是您不能对方法1进行相同操作。

方法1被称为匿名函数。 让我们看一下另一个匿名函数:

(function() {
    alert('Hello World');
})();

最后两个括号是自执行部分。 它们使前面括号中的所有内容立即执行。

让我们谈谈对象内部和外部的自执行匿名函数

(function() {
    var Person = {
        sayHello: function() {
            alert('Hello World');
        }
    }
})();

在这里,我们有一个自执行的匿名函数,其中包含一个包含其自己的匿名函数的对象。

注意:这是初始化的简称。 但是,该名称( Person )没有特殊含义。

方法2实际上存储了对该函数的引用,您以后可以随时调用它。

一些事情; 您粘贴的这段代码中没有jQuery用法

在第一个示例中,您正在执行一个没有return语句的匿名函数 ,因此您要为$scope.test属性分配一个undefined值。

在第二个示例中,您将一个函数分配给$scope.test属性,然后执行该函数。

如果您还有任何问题,请查看有关函数的MDN文档。请添加评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM