2017-12-24 5 views
1

クロムブラウザでこれを読み込むと、空白のページが表示されます。他の例はこれまで私のために働いていましたが、私がここで何がうんざりしているのか分かりません。助けてください、ありがとう!Samさんのティーチからのグローバル変数とローカル変数の難易度

<!DOCTYPE html> 
<html> 
<head> 
<title>Variable Scope</title> 
</head> 
<body> 
<script> 
var a = 10; 
var b = 10; 
function showVars() { 
var a = 20; 
b = 20; 
return "Local variable 'a' = " + a + "\nGlobal variable 'b' = 
" + b; 
} 
var message = showVars(); 
alert(message+ "n\Global variable 'a' = " + a); 
</script> 
</body> 
</html> 
+1

文字列は複数行ではありません。 [http://jsbin.com/fumilocogo/1/edit?console]、[改行を削除する](http://jsbin.com/feqohetumi/edit)を使用してください。 ?console) –

+0

return文を1行に移動するだけで、stringを複数行にすることはできません。 https://www.jsnippet.net/snippet/1545/ –

+0

ブラウザコンソールでエラーを読む方法を学ぶことが重要です。ほとんどのエラーのWeb検索は、よく理解するのに役立ちます – charlietfl

答えて

0

HTML要素が空であるため、ページは空白になります。 JavaScriptコードについて二重引用符を使用する場合、文字列は1行で送信できます。

0

が今では、警告メッセージ

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Variable Scope</title> 
 
</head> 
 

 
<body> 
 
    <p>Global and local variable test</p> 
 
    <script> 
 
     var a = 10; 
 
     var b = 10; 
 

 
     function showVars() { 
 
      var a = 20; 
 
      b = 20; 
 
      return "Local variable 'a' = " + a + " \n Global variable 'b' = " + b; 
 

 
     } 
 
     var message = showVars(); 
 
     alert(message + "\n Global variable 'a' = " + a); 
 
    </script> 
 
</body> 
 

 
</html>

変数のスコープ(JavaScriptの)

が表示されますこのコードを実行する。..代わりに `使用を検討して、あるいは単に1行にあなたの文字列を書きます

JavaScriptには、グローバルとローカルの2つのスコープがあります。関数定義の外で宣言された変数はグローバル変数であり、その値はプログラム全体でアクセス可能で変更可能です。関数定義の中で宣言された変数はローカルです。関数が実行されるたびに作成および破棄され、関数外のコードからアクセスすることはできません。 JavaScriptは、ブロックスコープ変数の特別な場合を除いて、ブロックスコープ(中括弧{。。。}が新しいスコープを定義する)をサポートしていません。 JavaScriptの

適用範囲は、ローカル変数はグローバル変数と同じ名前を持つことができますが、それは全く別のものです。ある変数の値を変更しても、他の変数には影響しません。ローカルバージョンのみが宣言されている関数内で意味を持ちます。

// Global definition of aCentaur. 
    var aCentaur = "a horse with rider,"; 

    // A local aCentaur variable is declared in this function. 
    function antiquities(){ 

    var aCentaur = "A centaur is probably a mounted Scythian warrior"; 
    } 

    antiquities(); 
    aCentaur += " as seen from a distance by a naive innocent."; 

    document.write(aCentaur); 

    // Output: "a horse with rider, as seen from a distance by a naive 
     innocent." 

JavaScriptでは、変数は、スコープの先頭に宣言されているかのように評価されます。ここに示すように、予期しない動作が発生することがあります。 JavaScriptの関数を実行すると、それは最初に、例えば、すべての変数宣言のためするvar someVariableに見える

var aNumber = 100; 
    tweak(); 

    function tweak(){ 

    // This prints "undefined", because aNumber is also defined locally 
     below. 
     document.write(aNumber); 

     if (false) 
    { 
     var aNumber = 123;  
    } 
    } 

。これは初期値がで、未定義の変数はです。変数が値で宣言されている場合、たとえばvar someVariable = "something";の場合、最初は値が未定義であり、宣言を含む行が実行されたときにのみ宣言された値をとります。

JavaScriptは、宣言が条件ブロック内にあるかどうかにかかわらず、コードを実行する前にすべての変数宣言を処理します。 JavaScriptがすべての変数を見つけたら、関数内のコードを実行します。変数が暗黙的に関数内で宣言されている場合、つまり代入式の左側に表示され、var-で宣言されていない場合、変数はグローバル変数として作成されます。

JavaScriptでは、内部(ネストされた)関数は、関数が返った後であっても、関数自体と同じスコープ内にあるローカル変数への参照を格納します。この参照セットはクロージャと呼ばれます。次の例では、外部関数の入力パラメータの名前がであるため、内部関数への2番目の呼び出しで最初の呼び出しと同じメッセージ( "Hello Bill")が出力されます内部関数のために。

function send(name) { 
    // Local variable 'name' is stored in the closure 
    // for the inner function. 
    return function() { 
     sendHi(name); 
     } 
    } 

    function sendHi(msg) { 
    console.log('Hello ' + msg); 
    } 

     var func = send('Bill'); 
     func(); 
     // Output: 
     // Hello Bill 
      sendHi('Pete'); 
     // Output: 
     // Hello Pete 
     func(); 
     // Output: 
     // Hello Bill 

ブロックスコープの変数

のInternet Explorer 11のブロックスコープの変数である、LETとconstのためのサポートを導入しています。これらの変数については、中括弧{。 。 。}新しいスコープを定義します。これらの変数のいずれかを特定の値に設定すると、その値は設定されているスコープにのみ適用されます。

次の例では、を使用して、とブロックスコープを使用する例を示します。

Note 

    The following code is supported in Internet Explorer 11 standards mode and 
    later. 


      let x = 10; 
     var y = 10; 
     { 
      let x = 5; 
     var y = 5; 
      { 
       let x = 2; 
       var y = 2; 
       document.write("x: " + x + "<br/>"); 
      document.write("y: " + y + "<br/>"); 
      // Output: 
      // x: 2 
       // y: 2 
      } 
      document.write("x: " + x + "<br/>"); 
      document.write("y: " + y + "<br/>"); 
      // Output: 
      // x: 5 
     // y: 2 
     } 

     document.write("x: " + x + "<br/>"); 
     document.write("y: " + y + "<br/>"); 
     // Output: 
     // x: 10 
     // y: 2 
関連する問題