0

誰かが私のために明確にしてくれませんか...予約語'var'を使用して変数を作成すると、その変数が公開されることを読みましたが、変数が関数内で作成された場合、どうすればよいでしょうか。

$('#timeIn').timepicker({ 'scrollDefaultNow': true });
    $('#timeIn').on('change', function() {
        var numIn = $('#timeIn').timepicker(('getSecondsFromMidnight'));
        var inHours = {
            hours: (numIn/86400)*24,
            getter: function() {return this.hours;}
        };
        timeIn = $('#timeIn').val();
        inArray.push(timeIn);
        events.push(timeIn);
});

この例では、変数numInとinHoursは、そのonChangeメソッド内でのみ認識されています。その場合、グローバル宣言はどのようになりますか?'timeIn'はグローバルスコープですが、操作を行わないと、文字列表現しか返されません。計算可能な時間をリターンとして取り戻すための私のオプションは何ですか。

4

3 に答える 3

10

関数内で単語を使用すると、その単語varがその関数のスコープにバインドされます。

この単語varを使用しないと、すべての機能とスコープで公開されます

于 2012-09-06T17:14:10.350 に答える
5

JavaScriptは関数スコープを使用します-すべての変数は、同じ関数またはそれよりも高いスコープ内からのみ見ることができます。

暗黙のグローバル変数は、最初に変数を宣言せずに変数を使用したときに発生するものです。コンパイルされた言語では、これによりコンパイルエラーが発生しますが、javascriptは変数をグローバルオブジェクトのプロパティとしてサイレントに宣言します(ブラウザーではこれがwindowオブジェクトです)

$('#timeIn').on('change', function() {
    var numIn; // only available from inside this anonymous handler function
    ... snip ...
    timeIn = $('#timeIn').val(); // this is an implicit global since it has not been declared anywhere
    // an explicit global, for example's sake
    window.someVar = 'foo';
});

javascript v1.7では、letキーワードを使用してブロックスコープを確立することもできます。

let(a = 5, b = 1) {
    // a and b are scoped to this block
    console.log(a+b); // 6
}
console.log(a+b); // error
于 2012-09-06T17:16:44.900 に答える
2

JavaScriptには3つのスコープしかありません。

x = 1;<-xはグローバルスコープにあります

varを関数の外部で使用すると、グローバルも作成されます。

<script type="text/javascript">var x = 1;</script><-xはグローバルスコープにあります

function () { var x = 1; }<-xは関数スコープ内にあります

for (let i = 0; i < 5; i += 1) {}<-xはブロックスコープ内にあります

于 2012-09-06T17:15:52.527 に答える