Javascript 将立即调用的函数定义为普通函数并稍后将其分配给变量是否有效?

Javascript 将立即调用的函数定义为普通函数并稍后将其分配给变量是否有效?,javascript,Javascript,如果我创建一个立即调用的函数,如下所示: // assigned to variable and then invoked it var iife = (foo)(); // defined the function separately function foo() { var bar = 'baz'; console.log(bar); } (function () { // do some here })(); function foo() { var bar = '

如果我创建一个立即调用的函数,如下所示:

// assigned to variable and then invoked it
var iife = (foo)();

// defined the function separately
function foo() {
  var bar = 'baz';
  console.log(bar);
}
(function () {
  // do some here
})();
function foo() {
  var bar = 'baz';
  console.log(bar);
}

foo();
这是一个有效的生命吗?

生命是这样的:

// assigned to variable and then invoked it
var iife = (foo)();

// defined the function separately
function foo() {
  var bar = 'baz';
  console.log(bar);
}
(function () {
  // do some here
})();
function foo() {
  var bar = 'baz';
  console.log(bar);
}

foo();
在您的示例中,您将foo设置为常规函数,然后执行它

但foo将是正则变量。 在真实的IIFE中,它不会为当前作用域中的函数创建变量,它只是执行它。

IIFE如下所示:

// assigned to variable and then invoked it
var iife = (foo)();

// defined the function separately
function foo() {
  var bar = 'baz';
  console.log(bar);
}
(function () {
  // do some here
})();
function foo() {
  var bar = 'baz';
  console.log(bar);
}

foo();
在您的示例中,您将foo设置为常规函数,然后执行它

但foo将是正则变量。
在真实生活中,它不会为当前范围内的函数创建变量,它只是执行它。

它不是一个IIFE

function foo() {
  var bar = 'baz';
  console.log(bar);
}

var iife = (foo)();
(function () {
  var bar = 'baz';
  console.log(bar);
})();
这只是一个正常的函数,您可以在其中毫无理由地分组
(foo)
。 您的正常功能应如下所示:

// assigned to variable and then invoked it
var iife = (foo)();

// defined the function separately
function foo() {
  var bar = 'baz';
  console.log(bar);
}
(function () {
  // do some here
})();
function foo() {
  var bar = 'baz';
  console.log(bar);
}

foo();
你的生活应该是这样的

function foo() {
  var bar = 'baz';
  console.log(bar);
}

var iife = (foo)();
(function () {
  var bar = 'baz';
  console.log(bar);
})();

它不是一种生活

function foo() {
  var bar = 'baz';
  console.log(bar);
}

var iife = (foo)();
(function () {
  var bar = 'baz';
  console.log(bar);
})();
这只是一个正常的函数,您可以在其中毫无理由地分组
(foo)
。 您的正常功能应如下所示:

// assigned to variable and then invoked it
var iife = (foo)();

// defined the function separately
function foo() {
  var bar = 'baz';
  console.log(bar);
}
(function () {
  // do some here
})();
function foo() {
  var bar = 'baz';
  console.log(bar);
}

foo();
你的生活应该是这样的

function foo() {
  var bar = 'baz';
  console.log(bar);
}

var iife = (foo)();
(function () {
  var bar = 'baz';
  console.log(bar);
})();
此代码适用于:

function foo (){
    console.log('IIFE');
}

var bar = (foo)(); // IIFE
console.log(bar) // undefined
但这与:

var bar2 = foo(); // IIFE
console.log(bar2) // undefined
这是因为IIFE只是一个调用自身的函数:

(function(){
    // do something and then forget about this function
})();
虽然你的代码是有效的,但我认为
variife=(foo)()在概念上不是IIFE,即使它使用IIFE的语法。在它内部使用
foo
意味着它通过引用执行函数(正常函数调用的特征)。
()
是多余的,因此您应该只使用
foo()

此代码适用于:

function foo (){
    console.log('IIFE');
}

var bar = (foo)(); // IIFE
console.log(bar) // undefined
但这与:

var bar2 = foo(); // IIFE
console.log(bar2) // undefined
这是因为IIFE只是一个调用自身的函数:

(function(){
    // do something and then forget about this function
})();

虽然你的代码是有效的,但我认为
variife=(foo)()在概念上不是IIFE,即使它使用IIFE的语法。在它内部使用
foo
意味着它通过引用执行函数(正常函数调用的特征)。
()
是多余的,因此您应该只使用
foo()

你想用它实现什么?这是一个正常的函数调用好的,谢谢。答案消除了困惑。你想用这个实现什么?这是一个正常的函数调用。好的,谢谢。答案消除了混淆。您可以使用IIFE为变量赋值:
var foo=(function(){return'IIFE'})()可以使用IIFE为变量赋值:
var foo=(函数(){return'IIFE'})()