将 Javascript 函数作为参数传递 - 这个逻辑是如何工作的?

Posted

技术标签:

【中文标题】将 Javascript 函数作为参数传递 - 这个逻辑是如何工作的?【英文标题】:Passing a Javascript Function as Parameter - How Does This Logic Work? 【发布时间】:2020-09-07 05:56:38 【问题描述】:

我不明白在提交付款表单后,下面的 responseHandler 函数如何接收来自 API 调用的响应。以下是代码的简要总结:

var PaymentThing = function(e) 
    this["clientCallback"] = e;

    return 
        createToken: function() 
            // HTTP GET URL is generated and then an html script element is appended to the page head
            var a = "https://example.com/securitytoken?creditcard=xxxx?callback=PaymentThing.callback";
            var f = document.createElement("script");
            f.src = a;
            document.getElementsByTagName("head")[0].appendChild(f)
        ,
        callback: function(e) 
            this["clientCallback"](e.status, e.results)
        
    



var responseHandler = function(status, response) 
    // How does this even work?
    console.log(response, status);



// Form Submission
jQuery('#checkout_payment_form').submit(function() 
    PaymentThing.createToken(responseHandler);

所以我的问题是,responseHandler 函数如何接收来自 HTTP GET 调用的响应?在我看来,甚至没有进行 HTTP 调用。我只看到一个 URL 被添加到一个 HTML 脚本元素(使用 createToken 函数),该 URL 甚至从未被调用/执行(但不知何故它是?)。另外,当我没有看到它们被传递到 responseHandler 函数调用时,(状态、响应)参数是如何传递到 responseHandler 函数的?

我不明白这里的逻辑或操作顺序,谁能解释一下这是怎么回事?

编辑: 好的,我想我现在看到了 responseHandler 函数是如何接收状态和响应参数的。我编辑了上面的代码以显示生成的 HTTP url 中有一个回调函数。但是,该 URL 是如何被调用的?在我看来它仍然是惰性的,并且被卡在页面的 HTML 中并且没有激活。

【问题讨论】:

您确定此代码有效 有效吗?这个 sn-p 有很多问题。 我认为您可能在这里遗漏了一些代码。也许f.onload = arguments[0] 或类似的东西? 这里缺少一些东西。 PaymentThing.createToken(...) 也会出错 【参考方案1】:

我认为如果您运行responseHandler 函数并将结果存储在一个变量中,该变量可以作为PaymentThing.createToken() 中的参数调用,它会考虑到它。

【讨论】:

【参考方案2】:

那里的代码都没有调用responseHandler。将它传递给 createToken 方法毫无意义,因为它完全忽略了所有参数。

可能添加到页面的脚本尝试调用名为 responseHandler 的全局函数,但如果不检查脚本就无法判断。

【讨论】:

是的,添加的脚本确实尝试执行回调函数,该函数执行 responseHandler 函数。但是,当它刚刚添加到页面的 HTML 中时,为什么或如何实际执行该脚本?是否有一段代码我又丢失了,或者 @JohnWLIV — 是的。这就是脚本元素的全部意义:它加载并运行一个脚本。

以上是关于将 Javascript 函数作为参数传递 - 这个逻辑是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

将 JavaScript 函数作为参数传递

Javascript - 将函数作为参数传递

如何将数据库列值作为 JavaScript 函数的参数传递?

javascript 使用解构分配将对象作为函数的参数传递

将 Javascript 函数作为参数传递 - 这个逻辑是如何工作的?

将字符串从控制器传递到部分视图作为 javascript 函数参数