【发布时间】:2014-03-11 17:49:08
【问题描述】:
我对“使用严格”变量的用法有疑问。
为什么下面会默默地失败而不是抛出错误?
"use strict";
var $class = {};
$class.rowsICanDisplay = 10;
$class.difference = -1;
var absDifference = 1;
var gridTableBody = $('#mytable tbody');
//code removed for clarity
if($class.difference > 0) {
var offset = $class.rowsICanDisplay - absDifference; // mistake should be declared in outer scope
//code removed for clarity
$('tr:lt(' + offset + ')', gridTableBody).remove();
}
else {
//code removed for clarity
$('tr:gt(' + offset + ')', gridTableBody).remove(); // why does this fail silently
}
【问题讨论】:
-
因为 Javascript 没有块作用域。对不起。不过,JSHint 会捕捉到这一点。
-
@EricHerlitz - 抱歉解决了这个问题(在实际代码中实际上并不是问题)。
-
@SLaks - 啊,我明白了,这很令人沮丧,因为它看起来确实如此。我想我会做一个后期构建任务来运行 JSHint 然后谢谢。 (如果你写这个作为答案,我会选择它)
-
JavaScript 作用域是正常的。外部范围变量在外部范围内可用,并且可用于该范围内的任何函数。
-
附带说明,我建议您避免在变量名前使用 $。这更像是一个 PHP 的东西,它很容易与 jQuery 混淆。
标签: javascript strict