0

渡された変数を変更する単純な関数があります。ただし、関数を終了すると、変数は古い値に戻ります。原因や直し方がわからない

<!DOCTYPE html>
<html>
<head>

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>    

  <script>
    $(document).ready(function() {
        var a='test';

        $().doit(a);
        alert(a);
    });

    (function ($) {
            $.fn.doit = function (input) {
                alert(input);
                input='new';
                alert(input);
            };

    }(jQuery));
  </script>
</head>

<body>
</body>
</html>
4

2 に答える 2

4

これは仕様によるものです。変数が内部スコープ (doit 関数) を出ると、値は以前の値に戻ります。これは、JS では変数が常に値によって渡されるためです。

値を保持したい場合は、関数から値を返す必要があります。

<script>

    $(document).ready(function() {
        var a='test';

        a = $().doit(a);
        alert(a);
    });

    (function ($) {
            $.fn.doit = function (input) {
                alert(input);
                input='new';
                alert(input);
                return input;
            };

    }(jQuery));
  </script>

ここで動作することがわかります: http://jsfiddle.net/nQSNy/

于 2013-05-30T08:11:08.913 に答える
1

これは、変数を参照ではなく値で渡しているためですa。ただし、関数から値を返し、それを使用することはできます。

于 2013-05-30T08:11:50.360 に答える