我试图理解为什么JSLint在以下示例中抱怨隐含的全局变量:
var TEST = (function () {
var count = 0;
function get_count() {
return add_one();
}
function add_one() {
count += 1;
return count;
}
return {
get_count: get_count
};
}());
Run Code Online (Sandbox Code Playgroud)
通过JSLint运行它会给出错误:
第5行第12个问题:未定义"add_one".
除了说:
隐含的全局:add_one 5
如果在add_one()功能之前移动功能,get_count()则错误消失.但是,使用上面的代码,在浏览器中运行它时不会产生任何错误.任何人都可以解释为什么JSLint抱怨?
谢谢!
马特
Jac*_*kin 11
这是因为JSLint使用Pratt Parser,一个自上而下的解析器,而不是一个完整的JavaScript解释器.如果真的被解释了,那么它就不会给你那个错误.
add_one是一个隐含的全局,因为解析器还没有遇到该变量,因此它假定您的周围代码将具有该变量.但是,如果你翻转它,那么解析器已经遇到了add_one变量,而且它都是桃子和奶油:-)
顺便说一句,我注意到你的结束功能线上有一个小错字:
}());应该是})();.
| 归档时间: |
|
| 查看次数: |
3367 次 |
| 最近记录: |