最近我一直在学习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));
我对遗漏()
括号引起的不同结果感到困惑。
感谢您的帮助。
答案 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))