<div class="codetitle"> <span><a style="CURSOR: pointer" data="61513" class="copybut" id="copybut61513" onclick="doCopy('code61513')"><u>コードをコピー</u></a></span> コードは次のとおりです。</div> <div class="codebody" id="code61513"> <br><!DOCTYPE html> <br><html> ; <br><head> <br><meta charset="UTF-8"> <br><script type="text/javascript" > <br>/* <br>* 1. js 内のすべての変数は public です。 <br>2. js には静的変数はありません <br> 3. クロージャ: 関数の外部の変数は関数内から呼び出すことができます。 ; その逆、<br>*/ <br><br>var <br>function test1(){ <br>var r2="abc"; //alert(r); >} <br> //alert(r2);//アクセスできない関数内の r2 <br>test1(); <br>//入れ子関数内でも問題ありません <br>function test2(num1){ <br> function test3 (num2,num3){ <br>return num2 num3 num1; <br>return test3(10,20) <br>} <br>//alert(test2(30)); // ----------ループ内のクロージャ---------- <br>function testfun(){ <br>var r= 1; <br>var arr=[]; <br>for(var x=0;xr ; <br>arr[x]=function(){ <br> ; <br>} <br>} <br>return <br>} <br>alert("testfun:" testfun()); :" arr2[0]); <br>alert("arr:" arr2[1]()); <br>alert("arr:" arr2[2]()); <br>//= == =======上記 3 つのポップアップ ボックスの結果はすべて 4========== <br>/*理由の分析: <br>JavaScript にどのような関数があるかを理解していますか? <br>関数は実行可能なコードのブロックです。たとえば、関数を定義する 2 番目の方法は <br>var add=new Function("a","return a 10) です。 "); 基礎となる本質は、この関数名が変数用に作成された実行可能コードの <br> 部分を指しているということです。 <br>* まず、testfun 関数が実行された後、arr[0]、arr[1]、および arr[] はすべて同じ <br>実行可能コード ブロック function(){ <br>return r <br>} を格納します。つまり、上記の 3 つは、変数名の後に () を追加するだけで実行できます。 <br> このときの r の値は 4 です。 <br> arr[0] を実行すると、 ]() の場合、このコード ブロック内のコードが実行されます。 <br>最終結果は return r となり、もちろん 4 が返されます。 <br>*/ <br><br></script> <br></head> <br><br></body> <br><br> </div>