我想通过剥离所有console.log("blahblah")来准备我的JS代码生产调试语句。我对thispopularSOanswer(codebelow)感到困惑关于如何使用Google'sclosurecompiler执行此操作,一个流行的JS缩小器/编译器。/**@const*/varLOG=false;...LOG&&log('helloworld!');//compilerwillremovethisline...//thiswillevenworkwith`SIMPLE_OPTIMALIZATIONS`andno`--define=`isnecessary!两个问题:多个
假设有一个全局变量是一个函数functionMyClass(){}还有这个类的方法比如MyClass.func1=function(){}我想确保YUI压缩和混淆工作不会像这样将整个类放在闭包中(function(){functionMyClass(){}MyClass.func1=function(){}})();有没有办法让YUI压缩工作而不这样做? 最佳答案 好吧,我想你可以在压缩之前将它包装在一个匿名函数中,然后在压缩之后删除匿名函数。还要确保您使用的是原型(prototype);)(function(){functionM
我有一个JavaScript对象可以做这样的事情——使用闭包来模拟私有(private)函数/变量与公共(public)函数/变量:varmyCoolObject=function(x,y){varprop1="acoolprop1value";varnegX=x*-1;varnegY=y*-1;varxyProduct=x*y;return{PublicProp1:prop1,getXYProduct:function(){returnxyProduct;},getNegX:function(){returnnegX;},getNegY:function(){returnnegY;}
我一直在为各种组件使用googlejavascript闭包库,我也使用过它的依赖管理。我很好奇这与使用requirejs进行依赖管理相比如何。具体来说,是否有特别的理由选择其中之一?如果我使用的是google闭包库,那么使用requirejs来管理依赖项与使用闭包依赖项管理是否合乎逻辑?是否有requirejs遵循而闭包不遵循的标准? 最佳答案 Closure库依赖管理旨在提供文件排序以解决依赖关系,并在编译期间由Closure编译器删除(实际上根据需要重写以提供命名空间)。虽然编译器对AMD模块有一些实验性的编译时支持,但它们仍然
哪个是最佳实践,哪个会带来更好的性能?更新:jsperf.com报告说(a)更快@http://jsperf.com/closure-vs-global-variablea)使用闭包varobj={init:function(){varself=this;$('#element').click(function(){self.clickEvent();});},clickEvent:function(){this.miscMethod();},miscMethod:function(){}};b)使用全局变量varobj={init:function(){//removedself=t
functionMyFunction(){closure=function(){alert('myparentfunctionnameis:'/*nowwhathere?*/);}closure();}MyFunction();结果应该是我的父函数名称是:MyFunction(致版主:我不知道为什么stackoverflow阻止我发送这个问题,声称它不符合质量标准。我是否必须输入一些多余的文本才能发送此问题。) 最佳答案 那是/是可能的,但它是受限的。第一个限制,并非所有Javascript引擎都支持以下模式,第二个(更引人注目),
根据thisnodestyleguide,给闭包一个名字是一个好习惯:Rightreq.on('end',functiononEnd(){console.log('winning');});Wrongreq.on('end',function(){console.log('losing');});不过,我习惯了想functionsomeName(){someStatements();}...语法作为创建全局变量的东西,someName或window.someName用于该函数。这真的是一个好的实践,还是一个非常糟糕的风格指南? 最佳答案
在jQuery中,您可以执行以下操作:$('#j_unoffered').on('click','.icon_del',function(){...这会在元素j_unoffered上放置一个处理程序,如果单击具有类icon_del的任何后代元素,该处理程序就会触发。此外,它适用于任何随后创建的icon_del元素。我可以在点击元素本身的Closure中正常工作。goog.events.listen(goog.dom.getElement('j_unoffered'),goog.events.EventType.CLICK,function(e){...如何在Closure中指定父事件目
有人可以向我解释闭包如何以更用户友好的形式工作吗?它的帮助和文档真的让我无处可去。您如何执行简单的任务,例如选择和修改dom(例如,选择页面上的所有内容并隐藏它们)? 最佳答案 参见http://derekslager.com/blog/posts/2010/06/google-closure-introduction.ashx,比较#4,隐藏所有div:goog.require('goog.dom.query');goog.require('goog.style');functionHideElement(selector){go
我们一直在讨论如何最好地处理我们的JS应用程序中的对象,研究StoyanStefanov的书,阅读无休止的关于“new”、“this”、“prototype”、闭包等的SO帖子(事实上有这么多,而且他们有很多相互竞争的理论,这表明没有完全明显的答案)。那么让我们假设我们不关心私有(private)数据。我们满足于相信用户和开发人员不会在我们定义的方式之外乱搞对象。鉴于此,这种技术有什么问题(除了它似乎违背了数十年的OO风格和历史)?//namespacetoisolateallPERSON'slogicvarPERSON={};//returnanobjectwhichshouldon