2015-08-25 2 views
0

Я хочу, чтобы иметь возможность запускать живой код удаленно. Поэтому я хочу иметь возможность запускать какой-то произвольный код на машине A, а затем передать часть этого кода машине B и продолжить ее с машины B.Где можно удаленно запускать код javascript?

Я узнаю, что могу получить исходный код любого через fn.toString().

Пример:

var foo = function(a, b) { return a + b; } 

console.log(foo.toString()); // prints "function (a, b) { return a + b; }" 

До сих пор так хорошо, но то, что происходит в этом случае?

var bar = (function() { 
    var x = 5; 

    return function(a) { return a + x; } 
})(); 

console.log(bar.toString()); // prints "function (a) { return a + x; }" 

В этом случае нет никакого способа, чтобы получить переменную x, поэтому я не могу запустить его на удаленной машине.

Любые предложения?

+0

определить 'x' во внешней области' console.log (bar.toString()); ' –

+0

@evc У меня нет контроля над функцией' bar'. Он может быть изменен другими сторонами. –

+0

Что вы подразумеваете под «run live code удаленно»? Какая у вас конечная цель? Возможно, вы сможете установить точку останова в отладчике вашего браузера. –

ответ

0

Причины вашей вторая функция возвращает следующую в виде строки

function(a) { return a + x; } 

потому, что у вас есть анонимная функция, которая возвращает функцию выше. «bar» затем определяется как эта функция, а не анонимная. Кроме того, учитывая, что ваша возвращенная функция локализована, вы не можете запустить ее дословно. Вместо этого вы можете использовать переменную, которая ее удерживает, «bar()», и после ее запуска она будет знать значение x.

+0

Точка не является переменной 'x'. Дело в том, чтобы иметь возможность передавать код на удаленный сервер и запускать его оттуда. –

+0

То, что я сказал, действительно. Вы не можете взять строковое значение «bar» и запустить его в другой среде как есть. Вам понадобится весь текст того, что создает «бар». Вот почему то, что вы демонстративно выше, называется анонимной функцией. Его анонимность скрывает локальный охват. –

Смежные вопросы