2017-11-30 8 views
0

私は以下のコードのようなクロージャを持っていれば、どのようにクロージャの外側に 'a'パラメータを得ることができます。 JSエンジンはスコープチェーンを使用してクロージャを呼び出すと 'a'の値を見つけることができますが、グローバルコンテキストから 'a'値を取得する機会はありますか?js closure、グローバルコンテキストの関数パラメータを取得

function fn(a){ 
    return function f(b){ 
     console.log(a + " " + b); 
    } 
} 

BR、イゴール

+0

なぜ1がそれを必要とするでしょう??! –

+0

母、私は誰かがそれを書くのを待っていました。 :D楽しみのために:D私はクロージャーで遊んでいるので、私はそれが可能かどうかを知りたいですか?たぶん評価? –

+0

評価がありません!そして、それはここで助けてくれません。それはちょうど不可能です。 –

答えて

1

いくつかのトリックは、関数オブジェクトに割り当てられる:

function fn(a){ 
    function f(b){ 
    console.log(a + " " + b); 
    } 
    f.a = a; 
    return f; 
} 

だから、あなたが行うことができます:

const result = fn(2); 
console.log(result.a, result(2)); 

しかし閉鎖はにありものをカプセル化する。あなたがそれを望まないなら、あなたはクロージャーを使うべきではありません。

+0

はい、tnxです。これは良いことです。私は忘れています、関数はオブジェクトなので、私はプロパティとしてパラメータを追加することができます。しかし、もう一度、グローバルコンテキストからの入力パラメータを直接取得する他の方法があります。スコープチェーンにこれらの変数がすべて存在するメモリ空間への参照です。 –

+0

ディープツール - >メモリ - >スナップショットを取る - >検索... –

0

var count=0; 
 
function add(){ 
 
return count+=1; 
 
} 
 
function sub(){ 
 
return count-=1; 
 
} 
 
function increment(){ 
 
document.getElementById("element").innerHTML=add(); 
 
} 
 
function decrement(){ 
 
document.getElementById("element").innerHTML=sub(); 
 
}
<button type="button" onclick="increment()">Increment!!</button> 
 
<button type="button" onclick="decrement()">Decrement!!</button><br><br><br> 
 
<div id="element"><div>

+0

インクリメントとデクリメントボタン:クロージャは、アウト関数の変数にアクセスできる内部関数です。これはスコープチェーンです。クロージャーには3つのスコープチェーンがあります。独自のスコープにアクセスでき、外部関数の変数にアクセスでき、グローバル変数にアクセスできます。関数の変数にアクセスするだけでなく、前述のように関数のパラメータにもアクセスします。 –

関連する問題