2014-03-04 68 views
-1

我有以下Javascript。我將另一個函數嵌套到主函數中。我試圖顯示主功能,從而也執行每一個嵌套函數,但它不能正在訪問Javascript嵌套函數

 <!DOCTYPE HTML PUBLIC> 

    <html> 
    <head> 
    <META http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>5 Multiplication Table</title> 



    </head> 
    <body> 

    <script> 


    function myFunction() 
    { 
     function operandFirst(){ 
      var x =""; 
      for (var i=0;i<10;i++) 
      { 
       var x = x + "The number is "+ i; 
      } 
      document.getElementById("display").innerHTML=x; 
     } 

    } 


    </script> 

    <body> 
    <button onclick="myFunction()">Display</button> 
    <p id="display"></p> 

    </body> 
    </html> 
+0

你到底希望發生? –

回答

1

函數聲明的作用域。您只能在其定義的範圍內訪問它們(JS範圍在功能級別處理,這意味着您只能從myFunction內部訪問operandFirst)。

你必須調用一個函數才能運行。

調用myFunction不會導致operandFirst被自動調用。你必須有一個聲明來調用它。

function myFunction() { 
    function operandFirst() { 
     // snip 
    } 

    // Like this 
    operandFirst(); 
} 
1

由於內部函數生活myFunction範圍之內,你總是可以返回它去獲得你的window範圍訪問它:

function myFunction() 
{ 
    return function operandFirst(){ 
     var x =""; 
     for (var i=0;i<10;i++) 
     { 
      var x = x + "The number is "+ i; 
     } 
     document.getElementById("display").innerHTML=x; 
    } 

} 

,並調用它像

myFunction()(); 

或者可能更具可讀性:

var operandFirst = myFunction(); 
operandFirst(); 

但是,它看起來像你可以多利用的對象,你的情況:

var myFunctions = { 
    operandFirst: function(){ 
     var x =""; 
     for (var i=0;i<10;i++) 
     { 
      var x = x + "The number is "+ i; 
     } 
     document.getElementById("display").innerHTML=x; 
    } 
}; 

myFunctions.operandFirst();