![](/img/trans.png)
[英]Why variable declared without a var in object method does not become a global variable?
[英]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.