当我在JavaScript中使用const内部函数时,我可以删除IIFE吗?

时间:2017-04-11 09:49:27

标签: javascript ecmascript-6

假设我有一个函数myFunction,它在其正文中使用其他函数otherFunction的结果,并且每次调用时结果都是常量。

function myFunction() {
  doSomething(otherFunction());
}

过去我使用IIFE-s仅调用otherFunction一次,因此优化代码:

var myFunction = (function() {
  let otherFunctionResult = otherFunction();

  return function() {
    doSomething(otherFunctionResult);
  };
}());

我想知道如果不使用IIFE,ES6 const关键字是否会达到相同的结果:

function myFunction() {
  const OTHER_FUNCTION_RESULT = otherFunction();
  doSomething(OTHER_FUNCTION_RESULT);
}

我是否可以期望优化const,以便只调用一次otherFunction?这将大大简化代码。

2 个答案:

答案 0 :(得分:1)

OTHER_FUNCTION_RESULT被声明为const的事实并不意味着它只被调用过一次:



function callOften(){
  const test = init(); // This is a `const`, but does it get called more often?
}

function init(){
  console.log('Init Called');
  return 1;
}

callOften();
callOften();
callOften();




基本上,你的IIFE是做你想做的事的一种方式。

答案 1 :(得分:1)

是的,ES6中的you don't need IIFEs any more。但是,您似乎将conststatic在其他语言中的行为混为一谈。如果只想调用otherFunction一次,仍需要在函数外部初始化它。它看起来像这样:

var myFunction;
{ // block scope!
  let otherFunctionResult = otherFunction(); // `const` works the same here

  myFunction = function() {
    doSomething(otherFunctionResult);
  };
}

不可否认,如果你的模块有一个应该存储在非局部变量中的结果(这里是:函数),那么IIFE仍然可以更好地阅读。