[英]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.test
是undefined
。
在方法2中, $scope.test
实际上存储了对该函数的引用,您可以随时使用$scope.test()
调用它,但是您不能对方法1进行相同操作。
方法1被称为匿名函数。 让我们看一下另一个匿名函数:
(function() {
alert('Hello World');
})();
最后两个括号是自执行部分。 它们使前面括号中的所有内容立即执行。
让我们谈谈对象内部和外部的自执行匿名函数 :
(function() {
var Person = {
sayHello: function() {
alert('Hello World');
}
}
})();
在这里,我们有一个自执行的匿名函数,其中包含一个包含其自己的匿名函数的对象。
注意:这是初始化的简称。 但是,该名称(
Person
)没有特殊含义。
方法2实际上存储了对该函数的引用,您以后可以随时调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.