考虑以下代码:
function processParagraph(paragraph) {
if (paragraph.charAt(0) === '%') {
for (var level = 0; paragraph.charAt(level) === '%'; level++) {}
return {
type: 'h' + level,
content: paragraph.slice(level + 1)
};
}
return {
type: 'p' + level,
content: paragraph
};
}
当我使用JSLint检查时,它会抱怨第二个返回语句中的level
为used out of scope.
。
但为什么呢? AFAIK,JavaScript具有词法范围/功能范围。由于没有嵌套函数,代码应该完全有效。或者我错过了什么?
答案 0 :(得分:2)
使用var
定义一个变量,它对整个函数可见。
即使从未定义过,您在最终报表中会使用level
。
我会把
var level = 0;
...在函数的顶部,而不是在for循环中声明它。
答案 1 :(得分:2)
JSLint是一个Lint,而不是一个普通的语法检查器。
功能级别范围是许多开发人员不习惯并且不期望的事情。 JSLint的作者认为以这样的方式声明变量是一种很好的方式,即如果使用块作用域,它们仍然是兼容的。
答案 2 :(得分:1)
它可能意味着level
未设置,但用于其他执行路径。