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 回答