【问题标题】:Call Javascript function in a variable function[solve]在变量函数中调用 Javascript 函数[解决]
【发布时间】:2019-09-13 12:24:37
【问题描述】:

我有一个清除用户文本的函数,但是 clearText 函数在函数和变量内部。

我在网上找了一些资料,但有些解决方案只解决变量中的函数,没有两个函数。

谁能告诉我如何在函数和变量中调用函数?

我很抱歉语法问题,英语不是我的母语。我很难用谷歌翻译来翻译。

Calling a JavaScript function named in a variable 我试了一下,但没有定义。

<script>
    var testing = (function(){
        function clearText(){
            /* call other function in this testing function */
        }
        /* other function */
    })();
    function resetInput() {
        /* I call clearText() function here */
    }
</script>

【问题讨论】:

  • 第一个函数返回什么?
  • return clearText; 然后你可以用它和testing var;

标签: javascript function variables


【解决方案1】:

除非您的第一个函数返回 clearText(或以其他方式使其在该函数之外可访问),否则您不能在 resetInput 中使用它。

如果它确实返回clearText,那么你可以通过testing使用它:

var testing = (function(){
    function clearText(){
        console.log('clearText() triggered');
        /* some code*/
    }
    /* some function */

    return clearText;    // ****
})();

function resetInput() {
    testing();           // ****
}

resetInput();

如果它使clearText 以其他方式(全局变量等)可用,您将如何使用它将取决于其他方式是什么。

【讨论】:

    【解决方案2】:

    您使用的是 IIFE (立即调用函数表达式)。您在以下代码中所做的是插入 nothing 的返回值进入变量testing

    执行以下操作:

    var testing = (function() {
      function clearText() {
        console.log('clearText execution');
      }
    })();
    
    console.log(testing);

    如果我们返回一些东西怎么办:

    var testing = (function() {
      function clearText() {
        console.log('clearText execution');
      }
    
      return 'try';
    })();
    
    console.log(testing);

    如果你想在 IIFE 之外执行函数clearText,你必须返回一个指向它的指针,比如:

    var testing = (function() {
      function clearText() {
        console.log('clearText execution');
        
        return 'done';
      }
      
      return clearText;
    })();
    
    console.log(testing);
    
    console.log(testing());

    现在,不需要 IIFE,您可以将函数存储在对象内并使用引用:

    var testing = {
      clearText: () => {
        console.log('clearText execution');
    
        return 'done';
      }
    };
    
    function resetInput() {
      testing.clearText()
    }
    
    resetInput();

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 2023-04-11
      • 2015-06-12
      • 2015-12-16
      • 1970-01-01
      • 2017-03-06
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多