为什么需要将立即调用的函数表达式 IIFE 包裹在括号 JavaScript 中
Why do you need to wrap a Immediately invoked function expression IIFE in parenthesis JavaScript
我有以下不会 运行 的代码(我试图拥有 0 个全局变量)。
function() {
var createworker = function() {
//private implemenation
var count = 0;
var task1 = function() {
count += 1;
console.log("task1 " + count);
};
var task2 = function() {
count += 1;
console.log("task2 " + count);
};
return {
// these are the aliases or the public api
// revealing module pattern mode
job1: task1,
job2: task2
};
};
var result = 2 + 2;
var worker = createworker();
worker.job1();
worker.job2();
worker.job2();
worker.job2();
worker.job2();
}();
JavaScript 出于某种原因不喜欢这样。但是下面的例子或者只是将匿名函数包装在 () 中允许它调用自己。这是怎么回事,为什么会这样?
(function() {
var createworker = function() {
//private implemenation
var count = 0;
var task1 = function() {
count += 1;
console.log("task1 " + count);
};
var task2 = function() {
count += 1;
console.log("task2 " + count);
};
return {
// these are the aliases or the public api
// revealing module pattern mode
job1: task1,
job2: task2
};
};
var result = 2 + 2;
var worker = createworker();
worker.job1();
worker.job2();
worker.job2();
worker.job2();
worker.job2();
}());
将其括在括号中是使其成为表达式的方式。表达式的结果是最后一个参数,因为那里只有一个参数(函数),它是表达式的值。
计算后,表达式(函数)的值将使用以下一组括号调用。
这就是为什么它被括在括号中,以创建实际的表达式。
我有以下不会 运行 的代码(我试图拥有 0 个全局变量)。
function() {
var createworker = function() {
//private implemenation
var count = 0;
var task1 = function() {
count += 1;
console.log("task1 " + count);
};
var task2 = function() {
count += 1;
console.log("task2 " + count);
};
return {
// these are the aliases or the public api
// revealing module pattern mode
job1: task1,
job2: task2
};
};
var result = 2 + 2;
var worker = createworker();
worker.job1();
worker.job2();
worker.job2();
worker.job2();
worker.job2();
}();
JavaScript 出于某种原因不喜欢这样。但是下面的例子或者只是将匿名函数包装在 () 中允许它调用自己。这是怎么回事,为什么会这样?
(function() {
var createworker = function() {
//private implemenation
var count = 0;
var task1 = function() {
count += 1;
console.log("task1 " + count);
};
var task2 = function() {
count += 1;
console.log("task2 " + count);
};
return {
// these are the aliases or the public api
// revealing module pattern mode
job1: task1,
job2: task2
};
};
var result = 2 + 2;
var worker = createworker();
worker.job1();
worker.job2();
worker.job2();
worker.job2();
worker.job2();
}());
将其括在括号中是使其成为表达式的方式。表达式的结果是最后一个参数,因为那里只有一个参数(函数),它是表达式的值。
计算后,表达式(函数)的值将使用以下一组括号调用。
这就是为什么它被括在括号中,以创建实际的表达式。