Как получить доступ к функции или переменной в скрипте, запущенном с помощью $ .getScript - PullRequest
0 голосов
/ 26 апреля 2018

Есть ли какой-нибудь способ получить доступ к пространству имен скрипта после его запуска с $.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

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Вы немедленно вызываете функцию через:

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

Изменить на

$.getScript('plugin.js').then(_ => plugin());
0 голосов
/ 26 апреля 2018

Проблема с этой строкой:

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

then принимает функцию в качестве аргумента, а не вызов функции (если только не вызван вызов функцииэто вызов функции высшего порядка, которая возвращает функцию, которая должна быть помещена в цепочку обещаний)

Вы вызываете plugin() в тот же момент, когда делаете запрос сценария.Вы не хотите этого - вы хотите позвонить plugin только после завершения запроса.Но в то время, когда выполняется getScript, plugin еще не определено в области видимости окна.Внутри then поместите функцию, которая запускает plugin после вызова:

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