2017-12-28 19 views
0

は、内側の関数を介してローカル変数の変化

function init() { 
 
    var name = "Breaking Bad"; 
 
    function getName() { 
 
    console.log(name); 
 
    } 
 
    function setName(newName) { 
 
    name = newName; 
 
    } 
 
    return { 
 
    getName: getName, 
 
    setName: setName 
 
    }; 
 
} 
 

 
const sayMyName = init().getName; // during initialization 
 
init().setName('Heisenberg'); // can be updated multiple times later 
 
sayMyName(); // isn't latest i.e. NOT Heisenberg

に耳を傾ける何を行うことができますか?

PS:私は、などを試してみましたが、内部関数の多くの答えを読んだ後のstackoverflow上の解決策を見つけることができませんでした、閉鎖

+1

ください。だから、いつもあなたに初期値を与えるでしょう。あなたが達成したいことを説明したら、代替ソリューション – Rajesh

答えて

8

PS:私がしようとしたが、後にstackoverflowの上で解決策を見つけることができませんでした内部関数の 読んで多くの回答などの閉鎖

あなたは

init().setName('Heisenberg'); 
をしたとき

あなたはUを終了しているためあなたがinitを呼び出すたびに別の参照init()に名前を設定すると、別の参照getNamesetNameが返されます。

あなたは `のinit()`を呼び出し、これまで、あなたは新しいオブジェクトを返すされている場合、それ

function init() { 
 
    var name = "Breaking Bad"; 
 
    function getName() { 
 
    console.log(name); 
 
    } 
 
    function setName(newName) { 
 
    name = newName; 
 
    } 
 
    return { 
 
    getName: getName, 
 
    setName: setName 
 
    }; 
 
} 
 
var init1 = init(); //save the initialization 
 
var sayMyName = init1.getName; 
 
init1.setName('Heisenberg'); // can be updated multiple times later 
 
sayMyName();

+1

でコードサンプルを実行可能スニペットに変換する自由を借りました。ちょっとしたヒント、質問にスニペットが含まれている場合は、[スニペットを回答する]ボタンをクリックすると、回答のスニペットになります。 –

+0

@MichaelGearyありがとう、私はとにかく同じことをやろうとしていた:) – gurvinder372

関連する問題