如何将函数制为空函数且不执行参数?
当我们开发时需要输出很多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");