Javascript a'的范围是什么;var';在函数中声明?

Javascript a'的范围是什么;var';在函数中声明?,javascript,jquery,Javascript,Jquery,有人能帮我澄清一下吗。。。我已经读到,使用保留字“var”创建变量会使该变量成为公共变量,但如果该变量是在函数中创建的,那怎么可能呢 $('#timeIn').timepicker({ 'scrollDefaultNow': true }); $('#timeIn').on('change', function() { var numIn = $('#timeIn').timepicker(('getSecondsFromMidnight')); var

有人能帮我澄清一下吗。。。我已经读到,使用保留字“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和inhour仅在onChange方法中已知,对吗?如果是这样的话,全球宣言会是什么样子?“timeIn”是全局范围的,但是没有操作,我只得到一个字符串表示。将可计算时间作为返回返回的选项有哪些

在函数中使用单词
var
将其绑定到该函数的作用域


不使用
var
一词会使它在所有函数和所有作用域中公开

JavaScript中只有3个作用域


x=1JavaScript使用函数作用域-每个变量只能从同一个函数或高于它的作用域中看到

隐式全局变量是在使用变量而不首先声明它时发生的情况。在编译语言中,这将导致编译错误,但javascript会以静默方式将变量声明为全局对象的属性(在浏览器中,这是
窗口
对象)

使用javascript v1.7,您还可以通过关键字建立块范围:


澄清:不使用
var
,会将名称绑定到全局对象,在浏览器中是
窗口
对象,但在其他环境(例如节点)中可能会有所不同。此外,还有一个有趣的小细节:“全局范围”中的
var
会产生副作用,使其无法删除。。(它可以作为属性解析,但作为变量处理)@pst您不能说
delete window.someVar?@jbabey
var x=2;删除x;window.x
这与
y=2不同;删除y;window.y
(在两个示例中均假定为全局范围)。。这只是一个小细节,但全局范围内的
var
确实起到了作用。(我的首选项/风格要求在全局上下文中明确使用
window.globalProp
而不使用
var
,但这是另一回事。)函数体是块,所以它仍然是块作用域。@pst,这是整个上下文。@lanzz否。因为C有“块作用域”;e、 g.
如果(y){int x;x=1;}
@Mythril我的观点是,在这个回答中没有给出足够的上下文:)使它成为全局的不是赋值,而是缺少范围。在这个回复中加入更多的上下文将消除歧义。请看@pst您是对的,先生,但我最想要的部分是对保留词“var”的确认反驳,何时何地使用它以及可以看到它的内容,但在您的链接中有大量关于范围的信息
$('#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';
});
let(a = 5, b = 1) {
    // a and b are scoped to this block
    console.log(a+b); // 6
}
console.log(a+b); // error