如何使用 $.getScript 访问脚本 运行 中的函数或变量

How to access a function or variable in a script run with $.getScript

在 运行 和 $.getScript 之后,有什么方法可以访问脚本的命名空间吗?由于 plugin 是在全局范围内定义的,我本以为我可以 运行 它。

index.js

$.getScript('plugin.js').then((...result) => console.log(result));

$.getScript('plugin.js').then(plugin());

plugin.js

function plugin()
{
  console.log("plugin.js");
  return "plugin";
}

_输出__

ReferenceError: plugin is not defined
    at https://replit.org/data/web_hosting_uncache/abalter/loading-scripts-and-callbacks-1/index.js:5:25
[ 'var plugin = function()\n{\n  console.log("plugin.js");\n  return "plugin";\n}',
  'success',
  Promise {
    readyState: 4,
    getResponseHeader: [Function],
    getAllResponseHeaders: [Function],
    setRequestHeader: [Function],
    overrideMimeType: [Function],
    statusCode: [Function],
    abort: [Function],
    state: [Function],
    always: [Function],
    catch: [Function],
    pipe: [Function],
    then: [Function],
    promise: [Function],
    progress: [Function],
    done: [Function],
    fail: [Function],
    responseText: 'var plugin = function()\n{\n  console.log("plugin.js");\n  return "plugin";\n}',
    status: 200,
    statusText: 'success' } ]

https://repl.it/@abalter/loading-scripts-and-callbacks-1

这一行有问题:

$.getScript('plugin.js').then(plugin());

then 接受 function 作为参数,而不是 function call(除非所述函数调用是对一个高阶函数 returns 一个要放入承诺链中的函数)

您在发出脚本请求的同时调用了 plugin()。您不希望这样 - 您只想在请求完成后才调用 plugin。但在 getScript 运行时,plugin 尚未在 window 范围内定义。在 then 中,放置一个函数 runs plugin once called:

$.getScript('plugin.js').then(() => plugin());

您正在立即调用函数:

$.getScript('plugin.js').then(plugin());

改为

$.getScript('plugin.js').then(_ => plugin());