为什么“使用严格”不尊重变量范围

时间:2014-03-11 17:49:08

标签: javascript strict

我对"使用严格"的使用有疑问变量。

为什么以下操作无声地失败而不是抛出错误?

"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
}

3 个答案:

答案 0 :(得分:3)

$('tr:gt(' + offset + ')', gridTableBody).remove(); // why does this fail silently

由于未在offset块的上下文中定义else,因此您的选择器无效且无法匹配任何内容。

答案 1 :(得分:2)

因为Javascript没有阻止范围 函数中任何地方声明的任何变量对整个函数都是可见的。

JSHint会抓住这个问题。

答案 2 :(得分:1)

在else语句中,未定义偏移量。您需要将其拉出来并在"之外定义它,如果"结构体。