web-dev-qa-db-ja.com

javascript:別の関数内で関数の変数の値を取得します

わかりましたので、私はこのコードを本文に持っています:

<input type="text" value="haha" id="full_name"/>

そして、スクリプト内のこのコード

<script language="javascript" type="text/javascript">
    function first(){
        var nameContent=document.getElementById('full_name').value;
    }

    function second() {
        first();
        y=nameContent; 
        alert(y);
    }
    second();
</script>

要素full_nameの値を示すアラートが必要ですが、機能しないようです。理由は誰にもわかりませんか? :S

15
Maria

nameContentは、first()関数内で定義したとおり、first()関数内にのみ存在します。

範囲を広げるには、関数の外側で定義します:

var nameContent;

function first(){
    nameContent=document.getElementById('full_name').value;
}

function second() {
    first();
    y=nameContent; alert(y);
}
second();

グローバル変数はすぐに乱雑になるので、少し良いアプローチは値をreturnにすることです:

function getFullName() {
  return document.getElementById('full_name').value;
}

function doStuff() {
  var name = getFullName();

  alert(name);
}

doStuff();
18
Blender

NameContentスコープは最初の関数内のみです。そのような方法で値を取得することはありません。

var nameContent; // now it's global!
function first(){
    nameContent = document.getElementById('full_name').value;
}

function second() {
    first(); 
    y=nameContent; 
    alert(y);
}
second();
4
Marcelo Assis

最初の関数にreturnステートメントが必要です。

function first(){
    var nameContent = document.getElementById('full_name').value;
    return nameContent;
}

そして、あなたの2番目の機能では次のことができます:

function second(){
    alert(first());
}
1
Jason Fingar

nameContent変数は関数スコープ内にあり、その関数の外では見えないため、関数の外でnameContentを使用する場合は、<script>タグ内でglobalを宣言し、次のようにvarキーワードなしで内部関数を使用します

<script language="javascript" type="text/javascript">
    var nameContent; // In the global scope
    function first(){
        nameContent=document.getElementById('full_name').value;
    }

    function second() {
        first();
        y=nameContent; 
        alert(y);
    }
    second();
</script>
1
The Alpha