繁体   English   中英

未使用var声明的JavaScript变量是否变为全局变量?

[英]Does a JavaScript variable not declared with var become global?

我在一个文件中有以下代码:

function refreshGridSuccess(responseText, entity) {

    oTable = $('#dataTable').dataTable({
        "sScrollX": "100%",

在另一个文件中我有:

$('#detailData')
        .on('click', '.sort-up', function (event) {
            event.preventDefault();
            var column = $(this).closest('th'),
                columnIndex = column.parent().children().index(column.get(0));
            oTable.fnSort([[columnIndex, 'asc']]);
            return false;
        })

除了这里,我没有oTable定义。 脚本似乎工作,所以这意味着oTable以某种方式被制作成一个全局变量?

现在我正在尝试开始使用Typescript,如果没有声明它就不会接受Otable 有没有办法可以将oTable声明为对象,或者我必须将它声明为与$('#dataTable').dataTable({})返回的类型相同的对象oTable $('#dataTable').dataTable({})

如果你在全球范围内,则没有区别。 如果你在函数中,那么“var”将创建一个局部变量,“no var”将查找范围链,直到它找到变量或命中全局范围(此时它将创建它)。

在这里找到: var关键字的用途是什么以及何时使用它(或省略它)?

是的,未使用var声明的变量变为全局变量。 当在函数范围之外使用时,它不一定是必需的,但是,使用在函数中定义的全局定义的变量会导致不可预测的结果。

“在这些情况下未能声明变量很可能会导致意外结果。因此,在ECMAScript 5严格模式下,在函数内部分配未声明变量的值会引发错误。” - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/var

你是对的。 没有var声明的变量被视为全局变量。 如果您在浏览器中,则该范围是window

另请注意,Javascript变量是函数范围的。 意思是你有这样的代码:

function test()
{
   for (var key in someObject)
   {
      var foo = 'bar';
   }
}

它相当于:

function test()
{
   var foo, key;
   for (key in someObject)
   {
      foo = 'bar';
   }
}

var声明放在哪个块中无关紧要,实际声明发生在函数的开头。 如果你想google它,这也称为variable hoisting

现在关于Typescript ,我没有机会玩它。 但我认为你仍然可以做var oTable; 就在你使用变量之前?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM