Saloom
Saloom

Reputation: 163

Global Object name in Javascript

I am using an ERP that has the functionality of allowing me to write Javascript in order to control/adjust the flow of events. In my case there is no "window" global object.

I need to use eval() on global scope and I am missing the name of the global object. Is there a way of finding this out?

Upvotes: 0

Views: 211

Answers (1)

T.J. Crowder
T.J. Crowder

Reputation: 1075249

I need to use eval() on global scope...

If you literally mean you need to eval something at global scope, you can do that with indirect eval:

(0, eval)("your code here");

It looks weird, but it makes eval work in global scope rather than local scope.

var n;    // A global `n`
function direct() {
  var n;
  
  eval("n = 'a';");
  console.log("Direct:");
  console.log("  local n =  " + n);
  console.log("  global n = " + window.n);
}
function indirect() {
  var n;
  
  (0, eval)("n = 'b';");
  console.log("Indirect:");
  console.log("  local n =  " + n);
  console.log("  global n = " + window.n);
}
direct();
indirect();

...and I am missing the name of the global object. Is there a way of finding this out?

If you're running your code in loose mode, you can get access to the global object by calling a function, which will run with this referencing the global object. So:

var global = (function() { return this; })();

...gives you a variable called global that references the global object. It doesn't work in strict mode, because in strict mode, this in that function will be undefined.

It's also entirely possible that your code is being called with this already referencing the global object, so you might check that first.

Upvotes: 1

Related Questions