присвоение функции имени глобально - PullRequest
1 голос
/ 27 июня 2011

Мне нужна функция javascript f, которой присвоена другая (анонимная) функция g, а имя n назначит g этому имени в глобальной области (или, по крайней мере, в текущей области).Я должен быть в состоянии использовать это так:

f(function(){ /* code */ }, "foo");

foo(); // this call should now work!

Возможно ли это?Мне нужно чистое решение JavaScript, никаких DOM-вещей или чего-то в этом роде.Это не предназначено для запуска в любом браузере.

Отказ от ответственности: У меня может быть, а может и нет веская причина для этого.Вам не нужно читать мне лекции о том, как сохранить глобальный охват в чистоте и т. Д .;)

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Согласно Рейду

function f(g, n) {
    this[n] = g;
}

Или, чтобы быть более безопасным:

function f(g, n) {
    (function() { return this; })()[n] = g;
}
0 голосов
/ 27 июня 2011

Если вам нужно быть совместимым со строгим режимом ES5, вам понадобится:

var addGlobalFunction = (function(global) {
    return function (fn, name) {
        global[name] = fn;
    };
})(this);

Ссылка на глобальный объект хранится в замке.Однако трудно понять, почему такая функция может быть необходима.

...