Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用闭包编译器删除console.log_Javascript_Debugging_Global Variables_Closures_Google Closure Compiler - Fatal编程技术网

Javascript 使用闭包编译器删除console.log

Javascript 使用闭包编译器删除console.log,javascript,debugging,global-variables,closures,google-closure-compiler,Javascript,Debugging,Global Variables,Closures,Google Closure Compiler,我想通过剥离所有console.log(“废话”)调试语句来准备JS代码生成。我对如何使用一个流行的JS小型编译器来实现这一点感到困惑 /** @const */ var LOG = false; ... LOG && log('hello world !'); // compiler will remove this line ... //this will even work with `SIMPLE_OPTIMALIZATIONS` and no `--define=`

我想通过剥离所有
console.log(“废话”)
调试语句来准备JS代码生成。我对如何使用一个流行的JS小型编译器来实现这一点感到困惑

/** @const */
var LOG = false;
...
LOG && log('hello world !'); // compiler will remove this line
...

//this will even work with `SIMPLE_OPTIMALIZATIONS` and no `--define=` is necessary !
两个问题:

  • 多个文件:上面的代码如何处理多个文件(下面的基本示例)?它必须关闭,对吗?这难道不意味着你必须在每一页上都写上这段代码吗?此外,这难道不意味着你必须将所有你想成为全局变量的变量从
    var foo='bar'
    更改为
    var window.foo='bar'在每个页面上的这些闭包中

  • 小问题:它不应该是
    console.log(“…”)
    而不是
    log(“…”)
    ,因为
    log()
    给出了一个错误?我是不是漏掉了什么明显的东西

  • 
    

    file1.js的内容:

    var foo='bar';
    console.log("foo"+foo);
    
    file2.js的内容

    var baz='bazzy';
    console.log("baz"+baz);
    

    如果将代码拆分为多个文件,我认为您需要一个构建过程,将它们连接到一个立即调用的函数中。然后您的
    var LOG=false只能在顶部包含一次

    如果“每个页面”,您的意思是每个页面都有单独的JavaScript文件,这些文件不打算连接在一起,那么是的,您需要在每个页面的顶部都有这些代码,但是您也没有充分利用闭包编译器

    关于全局变量,是的,设置时需要使用
    窗口
    ,尽管我希望您只定义一个全局变量

    使用
    log()
    意味着有人定义了一个
    log()
    函数,这样它就不那么冗长了

    function log() {
        return console.log.apply(console, arguments);
    }
    

    我想你不明白你链接中的答案。作者建议您创建一个新变量

    var LOG = false;
    
    然后您只需编写
    LOG&&&uuuuuuuuuuuuuuuuuuuuuuuuuuuu
    (coresspoots to
    if(LOG)\uuuuu code\uuuuu;
    )和&&之后的代码将不会被处理,因为布尔表达式的部分求值。将日志设置为true后,将对其进行处理。该变量通常称为“开关”或“标志”


    顺便说一下,闭包编译器可能会编辑您的代码,但该代码在“编译”之后的行为必须与之前的行为相同。这是所有这些小型化和优化程序的主要原则(它们不能将快速排序转换为GTA5)。因此,不要使用闭包编译器使您的代码以不同的方式工作(如果是的话,这是不可能的-它们有一个bug!)。

    log
    是一个通用的日志功能,它可以只是
    console.log
    的包装器,也可以提供其他类型的日志。它只是用于演示。这个定义留给读者作为练习。@ChadKillingsworth谢谢,我不知道这是一个练习还是我还没有学会的JS。谢谢!我现在已经更好地解释了我的问题中“多个文件”的含义。请参阅编辑。-@user2736012您能提供一个“将它们连接到一个立即调用的函数中的构建过程”的基本示例吗?我不太清楚你说的是什么意思。Closure compiler正在从my file1.JS、file2.JS、jquery.JS等文件中生成一个大的JS文件。一些服务器端代码有助于实现一个自动化过程,即获取单个文件,将它们合并到一个文件中,对该文件运行所需的过程(如Closure compiler),并将结果输出到一个新文件,该文件将包含在项目中。好的,谢谢,现在已经清楚了。最后一个问题:为什么只有一个全球性的?仅仅因为良好的代码实践?防止名称冲突?其他原因?@Timperson:是的,减少主要为您描述的目的创建的global的数量被认为是一种良好的做法。。。名字冲突。-@IvanKuckir谢谢。“我想你不明白你链接中的答案。”。是的,这就是我问这个问题的原因。:)