2

変数を1レベル下のsetInterval関数に渡そうとすると、コードは次のようになります。

function file_copy_progress(directory){
    console.log("stage 1 " + directory);
    setInterval(function(directory){
        console.log("stage 2 " + directory);
    }, 1000);
}

それから私はそれをこのように呼びます:

file_copy_progress("/home/user/tmp/test");

コンソールでの結果は次のとおりです。

stage 1 /home/user/tmp/test
stage 2 undefined
stage 2 undefined
stage 2 undefined
...

directorysetIntervall関数で使用できるように、変数をもう1つのレベルに渡すにはどうすればよいですか?

4

1 に答える 1

7

directory内部関数の仮パラメータを削除するだけです

function file_copy_progress(directory){
    console.log("stage 1 " + directory);
    setInterval(function(){
        console.log("stage 2 " + directory);
    }, 1000);
}

外部関数のdirectoryパラメーターは、内部関数のクロージャーに取り込まれます。したがって、これをパラメータとして内部関数に渡す必要はありません。逆に、内部関数の仮パラメーターがある場合は、キャプチャされた変数が非表示になり、内部関数にアクセスできなくなります。

于 2013-02-24T17:55:42.460 に答える