Я пытаюсь выполнить кусок кода в пустом изолированном контексте выполнения в JavaScript. В приведенном ниже примере я пытаюсь выделить область выполнения . То, что я хочу сделать, это выполнить функцию в условиях, когда никаких глобальных переменных не находятся.Изолированный контекст выполнения в JavaScript
(function() {
'use strict';
var scope = Object.create(null);
var isolated = function() {
'use strict';
console.log(document); // Trying to get undefined
// but traces `document`.
};
isolated.call(scope);
})();
Я думал, что это было просто аннулирует глобальные переменные, но есть слишком много!
var isolated = function(window, document, location /* etc */) {
// ...
};
isolated.call(scope, undefined, undefined, undefined /* etc */);
Есть ли лучший способ сделать это?
Window.prototype.alert.call (окно, 1) обходит эту песочницу. –
Я получаю «TypeError: window undefined», но да, я бы не стал считать этот метод безопасным *. Насколько я знаю, вы не можете создать безопасную песочницу без разбора кода ввода. И даже тогда есть много ошибок, которые могут быть сделаны (например, люди часто забывают, что конструктор Function позволяет им использовать код eval). – kybernetikos
Это особый вектор для Firefox. –