将 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 函数的参数传递?