【问题标题】:Call functions inside of another function在另一个函数内部调用函数
【发布时间】:2017-09-22 20:16:23
【问题描述】:

我在函数中调用函数时遇到问题。

这是示例代码:

<script>
    function saveInfo() {
        function returnEmail() {
            var _e = document.getElementById("email").value;
            return _e;
        }

        function returnName() {
            var _n = document.getElementById("name").value;
            return _n;
        }
    }
</script>

saveInfo() 方法是在一个按钮中进行的:

<input type="submit" value="Save" onclick="saveInfo()" style="color: black">

所以有 2 个表格,您可以在其中填写您的电子邮件和姓名。通过单击“保存”-按钮,DIV 将消失(这有效),另一个 DIV 将出现在如下文本中: Name = (name) |电子邮件 =(电子邮件)。

我在调用对应行的 saveInfo() 的 returnEmail() 时遇到问题(其中有 'Name = ')。

我试着这样写:

<p>Email: 
   <script>
      var pEmail = saveInfo().returnEmail();
      document.write(pEmail);
    </script> <br>
</p>

我知道上面的脚本不正确,这不是我尝试返回它的唯一方法。

【问题讨论】:

  • saveInfo() 不返回任何内容。其中定义的函数是该函数的本地函数。如果您想在saveInfo 之外使用它们,请将它们归还。
  • 所以返回returnEmail();并返回 returnName();在每个函数之后?
  • 不,你只能从一个函数返回一个东西。所以返回一个包含其他每个函数的东西。我看不到这样做的意义。为什么returnEmailreturnName 不只是顶级函数?

标签: javascript html function


【解决方案1】:

您似乎正试图返回这些函数以供以后使用。尝试这样做。这个函数现在返回一个包含两个函数的对象。

function saveInfo() {
    return {
        returnEmail: function() {
            var _e = document.getElementById("email").value;
            return _e;
        },

        returnName: function() {
            var _n = document.getElementById("name").value;
            return _n;
        }
    }
}

以前,您的 saveInfo 函数没有返回任何内容,所以

saveInfo().returnEmail();

将评估为

undefined.returnEmail();

你会得到一个错误

【讨论】:

  • 我相信这行得通,它对我不起作用,但我意识到我需要在提交表单后加载我的脚本,并期待在我知道它是否存在之前解决这个问题作品。谢谢!
  • 电子邮件:

【解决方案2】:

您需要从函数saveInfo 返回公开的函数。此时,您的代码仅声明函数,但不返回任何内容。所以,saveInfo 返回undefined。下面的方法是 Revealing 模块模式 的实现,用于在您的函数之外显示公共成员。

function saveInfo() {
        var returnEmail = function () {
            var _e = document.getElementById("email").value;
            return _e;
        }

        var returnName= function () {
            var _n = document.getElementById("name").value;
            return _n;
        }

        return {
           returnEmail :returnEmail,
           returnName :returnName
        }
    }

【讨论】:

    【解决方案3】:

    如果您将其称为saveInfo().returnEmail();,那么您可以执行以下操作。 saveInfo 返回一个包含 returnEmail 方法的对象。

    <script>
        function saveInfo() {
            // Do any desired logic
            return {
                returnEmail: function() {
                    var _e = document.getElementById("email").value;
                    return _e;
                },
    
                returnName: function() {
                    var _n = document.getElementById("name").value;
                    return _n;
                }
            }
        }
    </script>
    

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 1970-01-01
      • 2019-09-11
      • 2011-05-30
      • 1970-01-01
      • 2018-06-12
      • 2016-01-04
      • 2015-07-04
      • 1970-01-01
      相关资源
      最近更新 更多