|
Javascirpt で 思ったとおり実行されないと質問された。 こんなやつ ボタン button0〜button9 の onclick イベント をクロージャでまとめて定義したいらしいんだけれど、 これ、実行するとどのボタンも 10 を表示しますよね。 LINQ でいつ実行されるかを考えるというエントリを何度かしたけれど同じことですね。 Javascript もクロージャは遅延実行されます。 参照している i の値はボタンクリック時には 10 になっているので、どのボタンを押しても 10 が表示されるわけですね。 これは C# 2.0 の匿名メソッドや C#3, VB9 の ラムダ式 でも同じことがいえます。 VB.NET このようなコードを記述した場合次の警告が表示されます。 警告 ラムダ式で繰り返し変数を使用すると、予期しない結果が発生する可能性があります。代わりに、ループ内にローカル変数を作成して、繰り返し変数の値を割り当ててください。結果 5 5 5 5 5 ループ内にローカル変数を作れとあるので、 結果 0 1 2 3 4 ただ、Javascript の場合は 変数のスコープがメソッドの先頭で作られてしまうので結局できず...ボタンにプロパティを作って持たせればできるけれど、これでいいの?? # 2007/10/26 die さんの指摘で javascript の評価式を修正 |
| << 前記事(2007/10/12) | トップへ | 後記事(2007/10/19)>> |
| タイトル (本文) | ブログ名/日時 |
|---|---|
式を実行して式を作る。
以前のこの記事 に die さんからコメントをいただきました。 ラムダ式の遅延実行 ...続きを見る |
かるあ のメモ 2007/10/26 14:48 |
| 内 容 | ニックネーム/日時 |
|---|---|
おひさしぶりです。ここのRSSを登録してたリーダーのサービスが消えちゃって、しばらく取得できてませんでした。この件、すでに解決済みかもしれませんけど、こんなのでどうでしょうか: |
die 2007/10/26 12:49 |
お久しぶりです。 |
かるあ 2007/10/26 13:33 |
| << 前記事(2007/10/12) | トップへ | 後記事(2007/10/19)>> |