在Javascript中,代码末尾的“()”是什么意思?

时间:2017-07-27 02:47:19

标签: javascript function

最近我一直在学习JavaScript编程。在处理JavaScript模块时遇到了一些麻烦(基于函数,这是JavaScript中唯一创建新范围的东西)。

1

var getter = function() {
  var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday",
    "Thursday", "Friday", "Saturday"
  ];
  return function(number) {
    return dayNames[number];
  };
};
console.log(getter(2));

2

var getter = function() {
  var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday",
    "Thursday", "Friday", "Saturday"
  ];
  return function(number) {
    return dayNames[number];
  };
}();
console.log(getter(2));

我对遗漏()括号引起的不同结果感到困惑。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我理解你的困惑。您看到的前两个一般情况可能相对清晰 - ()末尾的function定义了一个不带参数的函数(对于像function myFunction()这样的命名函数也是如此。然后它用于调用没有参数的函数,例如:

function myFunction() { // Defines the function named myFunction
    console.log('hello world');
}
myFunction(); // calls myFunction, and will console log 'hello world')

令人困惑的额外案例是Immediately Invoked Function Expression (IIFE)。这是我们定义一个函数然后立即调用它。这可能有一些原因 - 通常是为了创建闭包:

var counterizer = (function () {
	var count = 0;
	return {
		incrementCount: function () {
			count++;
			console.log(count);
		}
	}
})(); // the inner anonymous function is immediately invoked

counterizer.incrementCount();
counterizer.incrementCount();

这里立即调用内部匿名函数并返回一个递增count并且控制台记录它的对象 - 它存储在一个闭包中,并且外部世界无法访问。

希望这有帮助!

答案 1 :(得分:0)

你的函数返回一个函数,这意味着必须添加()如果它只返回数字或字符串,你不必添加()例如

//this function just return function getter()(number)
var getter = function() {
 var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
 ];
 //this one return function(number)
 return function(number) {
  return dayNames[number];
 };
};
//so if you want function to return function you must add () after that function like this:

console.log(getter()(2))