日期:2014-05-16  浏览次数:20403 次

如何将函数制为空函数且不执行参数?
当我们开发时需要输出很多log信息,例如使用下面的函数
log = function(msg)
{ console.log(msg);}

在发布版中我们不希望打印log,因此在发布版将log函数置空如下
log = function(msg){};

但实际上这种方式不能防止参数部分的执行,如调用log(getName()),则其中的getName()无论如何都会被执行。

而我希望完全不执行log函数及其参数部分,需要怎么做呢?各位大牛求指导!

------解决方案--------------------
不明白你的意思 你在开发时使用的方法发布时完全删掉不行吗?
比如这个方法应该写在一个外部单独的js文件里  要调试的页面引入这个js然后调用 
发布时检测页面有引入这个js的页面删掉对应的东西??

------解决方案--------------------
A trick here:

var noLog = true; // release version
// noLog = false;    // development version

log( noLog ? null : getName());


//all your log line, should have a form:

log ( noLog ? null : messageExpression );

//By this trick, when noLog is false, messageExpression will not be executed!



------解决方案--------------------
想了半天只能这样

log= function () { 
if(arguments.length==1 && typeof arguments[0] !="function"){
console.log(arguments[0]);
return;
}

var back;
if(typeof arguments[0] =="function"){
console.log(Array.slice(arguments,1));
back =arguments[0].apply(arguments[0],Array.slice(arguments,1));
}else if(arguments.length>2 && (typeof arguments[1] =="function")){
var fn = arguments[1];
var args= Array.slice(arguments,2);
back =fn.apply(arguments[0],args);
}
console.log(back);
return back;
}

/*********************************/
function test() {
    console.log("test is run!!");
    return "test";
}
 
function sum(a ,b) {
    console.log("sum is run!!");
    return a+b;
}

var person={
age:10,
say:function (str) {
return str + this.age;
}
};

log("Test start!");
log(test);
log(sum,10,100);
log(person,person.say,"My age is");