Javascript 警告-危险使用此对象的全局变量
在谷歌闭包编译器中,我得到了警告 警告-危险使用此对象的全局变量 这里有一个例子。错误行和偏移量指的是单词Javascript 警告-危险使用此对象的全局变量,javascript,google-closure,google-closure-compiler,Javascript,Google Closure,Google Closure Compiler,在谷歌闭包编译器中,我得到了警告 警告-危险使用此对象的全局变量 这里有一个例子。错误行和偏移量指的是单词this function aToggle() { if(shown) toggle.show() else toggle.hide() $(this).text(shown ? 'Click to hide' : 'Click to show') shown = !shown } link.onclick = aToggle 我只想将其更改为匿名方法,但我
this
function aToggle() {
if(shown)
toggle.show()
else
toggle.hide()
$(this).text(shown ? 'Click to hide' : 'Click to show')
shown = !shown
}
link.onclick = aToggle
我只想将其更改为匿名方法,但我正在文件中的其他位置重新使用atogle
,因此需要对其进行命名
我可以将
atogle
标记为/**@constructor*/
——但它不是一个构造函数。我是否可以使用另一个注释来消除此警告,或者我是否在将其标记为构造函数或显示一堆无用的警告之间徘徊?我不太了解JQuery,但我认为您可以使用以下方法:
function aToggle(event) {
if(shown) {
toggle.show();
} else {
toggle.hide();
}
$(event.target).text(shown ? 'Click to hide' : 'Click to show');
shown = !shown;
}
$(link).bind('click', aToggle);
从跨浏览器通用事件对象检索单击的目标
编辑:作为一条建议,在你的{}
中使用
并使用分号,不要依赖你的浏览器为你做这件事
为了充分利用闭包工具,建议将闭包库与编译器结合使用(虽然不是必需的)首先,您可能做错了。:-) @简的想法是对的。但您可能应该遵循以下几点:
(function(){
var toggle = $("#toggle");
$("#yourLinksID, .orClassName").click(function(e) {
var shown = toggle.toggle().is(":visible");
$(this).html(shown ? "Click to hide" : "Click to show");
e.preventDefault();
});
}());
在编制时:
使用以下jQuery外部文件,告诉闭包编译器在jQuery中做什么:
如果您只是希望警告消息消失,请将
此替换为链接编辑:我一直在阅读Closure:the definal Guide,我刚刚意识到您可以简单地在事件处理程序之前添加,以使Closure编译器停止抱怨
看。当您在一个函数中使用this
时,如果该函数既不是带注释的/**@constructor*/
函数,也不是类的原型
函数,则闭包编译器会发出此警告。编译器假定,当在另一个对象的上下文中调用函数时(这就是事件回调所做的),您永远不会使用this
您可能必须更改某些位置以使闭包编译器停止使用此警告进行抱怨:
- 不要直接使用
link.onclick=…
,因为你必须搞乱这个和e | | window.event
。相反,使用jQuery包装事件处理程序,因为
- 如果在
jQuery.each
中使用this
,请将this
替换为函数的第二个参数。例如,jQuery.each([1,2,3],函数(i,val){…val…};
好的,很容易制作。不管怎样:显示的和切换是全局的?我没有使用Google闭包编译器,但它可能不知道你的Atogle是一个事件处理程序。看看是否有地方可以告诉它,因为这个不需要全局这个。是的,我在ot中使用的是Atogle她的位置。上面的代码只是我写的一个例子。我在其他地方使用Atogle有一个最新的externs文件,所以我不能用link
替换。上面的代码只是我写的一个例子。谢谢你的回答,我很快就会尝试。@GeorgeBailey啊,我没有检查更新。时间太长了自从1.3.2版本以来,我认为它永远不会被更新。我会更新我的答案。你为什么认为我应该使用大括号和分号?“应该”可能有点强,但大括号确实可以提高用于分组代码的程序的可读性。分号:。但更重要的是,我的解决方案对你有用吗?我还没有测试过它,我知道我已经转移到其他项目,但我不会忘记接受正确的答案。我看了编译器,它实际上去掉了大括号并添加了分号,这很好。谢谢你提到它。