调用函数的不同方法 - Javascript

时间:2017-01-03 05:02:45

标签: javascript angularjs

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

方法1:

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

方法2:

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

但是,我想知道:

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

我已经浏览了一些博客,但无法正确理解。

5 个答案:

答案 0 :(得分:2)

有很大的不同。

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

方法2实际上将$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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

调用

方法1 ,匿名函数。让我们看看另一个匿名函数:

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

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

让我们谈谈对象内外的self-executing anonymous functions

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

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

  

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

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

答案 4 :(得分:0)

几乎没有;您粘贴的代码中没有jQuery usage

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

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

去查看有关Functions的MDN文档,如果您还有任何疑问,请添加评论。