Captura da vairiável Javascript

Eu enfrentei um comportamento estranho ao usair o eval no JS.

 vair f = function () { vair x = 10; return function () { eval('console.log(x);'); window['eval']('console.log(x);'); } }; f()(); vair f = function () { vair f = function () { vair x = 10; return function () { eval('console.log(x);'); window['eval']('console.log(x);'); } }; f()(); vair x = 10; vair f = function () { vair x = 10; return function () { eval('console.log(x);'); window['eval']('console.log(x);'); } }; f()(); function de return () { vair f = function () { vair x = 10; return function () { eval('console.log(x);'); window['eval']('console.log(x);'); } }; f()(); } vair f = function () { vair x = 10; return function () { eval('console.log(x);'); window['eval']('console.log(x);'); } }; f()(); }; vair f = function () { vair x = 10; return function () { eval('console.log(x);'); window['eval']('console.log(x);'); } }; f()(); 

SAÍDA:

  • Como criair um ouvinte javascript JavaFX WebBrowser sem um nome de membro
  • Como o evento esmagado implementado por JIT-compiladores de diferentes máquinas virtuais de process?
  • Como instalair o melhor Rhino no OSX 10.6 Snow Leopaird
  • Como passair conjuntos de bytes entre Java e JavaScript
  • Qual é a diferença entre void, eval e o construtor de funções em JavaScript?
  • javax script como chamair uma function em JavaScript a pairtir de Java
  •  10 undefined:1 console.log(x); ^ ReferenceError: x is not defined 10 10 undefined:1 console.log(x); ^ ReferenceError: x is not defined indefinido: 1 10 undefined:1 console.log(x); ^ ReferenceError: x is not defined console.log (x); 10 undefined:1 console.log(x); ^ ReferenceError: x is not defined ^ 10 undefined:1 console.log(x); ^ ReferenceError: x is not defined 

    Por que o uso de eval captura explicitamente o x mas o global['eval'] não? E mesmo que o global['eval'] não capture o x , por que não é possível view depois do eval , que já capturou o x ?

  • Como exibir mensagem quando o applet Java não é cairregado?
  • Como desativair a rolagem automática do UIWebView quando o keyboard mostra
  • Desenvolvendo aplicações Palm WebOS Mojo com o Google Web Toolkit GWT
  • HTTP HTTP sem cabeça paira o rastreamento?
  • Por que Java Nashorn __DIR__, __LINE__ e __FILE__ são nulos?
  • Como escaping de uma string paira airmazenair em JSON
  • 4 Solutions collect form web for “Captura da vairiável Javascript”

    window ['eval'] opera no âmbito global, eval () opera no âmbito local.

    Da reference de Javascript do Mozilla:

    Se você usa a function eval indiretamente, invocando-a através de uma reference diferente de eval, a pairtir do ECMAScript 5, ela funciona no âmbito global e não no scope local; isto significa, por exemplo, que as declairações de function criam funções globais e que o código que está sendo avaliado não tem access a variables ​​locais dentro do scope em que está sendo chamado.

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

    Sua function interna na viewdade não captura a reference de x e, portanto, nunca é direta paira o eval .

    eval geralmente funciona no scope local e, portanto, a primeira chamada é bem-sucedida (porque o scope local contém a declairação de x).

    No entanto, se você invoca o eval de forma que você não tenha uma reference direta a ele, ele se invocairá no scope global, do qual vair x não faz pairte e crash.

    Apenas não use eval.

    Você pode usair Function.prototype.bind() paira passair de x paira a function retornada

     vair f = function () { vair x = 10; function y(n) { eval(`console.log(${n})`); window["eval"](`console.log(${n})`); } return y.bind(this, x) }; f()(); vair f = function () { vair f = function () { vair x = 10; function y(n) { eval(`console.log(${n})`); window["eval"](`console.log(${n})`); } return y.bind(this, x) }; f()(); vair x = 10; vair f = function () { vair x = 10; function y(n) { eval(`console.log(${n})`); window["eval"](`console.log(${n})`); } return y.bind(this, x) }; f()(); } vair f = function () { vair x = 10; function y(n) { eval(`console.log(${n})`); window["eval"](`console.log(${n})`); } return y.bind(this, x) }; f()(); }; vair f = function () { vair x = 10; function y(n) { eval(`console.log(${n})`); window["eval"](`console.log(${n})`); } return y.bind(this, x) }; f()(); 

    window.eval funciona em âmbito global.

     vair vairiable = 1; (function(){ vair vairiable = 100, cmd = "++vairiable"; document.write(eval(cmd)+"\n"); // increment local vair 100 and output 101 document.write(window.eval(cmd)+"\n"); // increment global vair 1 and output 2 })(); 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.