我们有三个JS文件:
<script type="text/javascript" src="js/pm.init.js"></script>
<script type="text/javascript" src="js/pm.util.func.js"></script>
<script type="text/javascript" src="js/pm.nav.js"></script>
在init.js中我们有:
$(function(){
var dirty = false;
})
在util.func.js中我们有:
function dirtyCheck(actionFunction) {
if (dirty == false) {
actionFunction();
return;
}
...
在nav.js中我们有:
$(function(){
$('#btn-nav-refresh').click(function() {
dirtyCheck(function() { doRefresh(); });
});
...
现在,当用户点击按钮后btn-nav-refresh
函数触发时,我们会收到dirty is not defined
错误。这是为什么?
答案 0 :(得分:5)
我觉得自己很脏,告诉你如何将你的“脏”变量变成一个肮脏的全局变量,但它就像这样:
$(function(){
window.dirty = false;
})
但是,你应该找到一个更好的方法来做到这一点。这是一个想法:
$(function() {
$('body').data('dirty', false);
});
然后:
// ...
if (${'body').data('dirty')) takeBath();
答案 1 :(得分:2)
在init.js中你不能把var dirty = false;
作为全局变量而不是函数定义吗?
答案 2 :(得分:2)
变量dirty仅在闭包中已知。这就是原因。
$(function(){
var dirty = false;
});
alert(dirty); // Undefined (same file, just one line after.
这是封闭的主要特征......
答案 3 :(得分:2)
正如其他人所说,dirty
超出范围,因为它包含在您的文档就绪函数中。将您的声明更改为:
var dirty = false;
$(function(){
});