2016-11-10 9 views
-2

誰かが匿名関数で変数へのアクセスを取得する方法を知っていますか?Javascript IIFE - バックドア?

var test = "Hi"; 

(function() { 
    var test = "Bye"; 

    // Outputs "Bye" 
    console.log(test); 
})(); 

// Outputs "Hi" 
console.log(test); 

あなたは「こんにちは」最後のログ・リターンを見ることができるようにしかし、私は「さようなら」は誰もこの例では値「さようなら」を取得する方法を知って取得したいです?

+1

「var」を取り除く – epascarello

+3

グローバルまたはコールバックなしでは、それは全体的なポイントではありません。また、http://stackoverflow.com/questions/14373475/ –

答えて

0

これを行う唯一の方法は、変数を無名関数のスコープ内に再作成しないことです。機能を実行

var test = "Hi"; 
 

 
(function() { 
 
    test = "Bye"; // notice no "var", meaning it uses the existing variable 
 

 
    // Outputs "Bye" 
 
    console.log(test); 
 
})(); 
 

 
// Outputs "Bye" 
 
console.log(test);

+0

を参照してください私は機能を変更することはできません。 – FullStackYeah

+0

次に、ローカルスコープで宣言された変数にアクセスすることはできません( 'var'を使用する場合) – Archer

2

スコープを作成します。 「バイ」はこの範囲で定義されています。このスコープは関数の外部からは決して見えません。

IIFEにアクセスできる場合は、この変数を変更してこの変数を外部スコープにエクスポートすることができます。この生命維持があなたのコードと同じクロス起源という名前の関数の内部にある場合は、外側の関数を表示することができます

:これらの例から外

var toto = function() { 
    var test = "Hi"; 

    (function() { 
     var test = "Bye"; 

     // Outputs "Bye" 
     console.log(test); 
    })(); 

    // Outputs "Hi" 
    console.log(test);  
} 

console.log(toto); 

は、何も行われないことができます。意図的に。ファンクションコード表示のクロスオリジン制限でさえ、あなたが属していないコードにアクセスするのを防ぐためです。賢明な人々がこれを考えました。私はバックドアが存在するかどうかは疑問だ。

+0

Yuup私は知っていますが、これを行うにはバックドアを試してみてください:) – FullStackYeah

+0

@FullStackYeah MITM –

関連する問題