var a = true, b = true, str = "";
if(a && b) {
str += "a";
} else {
str += "b";
}
alert(str+"c");
alert的时候有2种可能"ac","bc"
想要优化成
if(a) {
if(b) {
// 这里只是举例,实际用时,可能是一大堆的函数过程
str += "a"; // 函数过程A
} else {
str += "b"; // 函数过程B
}
} else {
str += "b"; // 函数过程B
}
alert(str+"c");
类似这样的,也就是,假设b是一个比较复杂的函数,为了提高执行速度,只有当a为真的时候才执行b函数进行判断
上面的语句已经实现了这个功能,但“函数过程B”必须写2次
该如何优化才能做到
b只有a为真时才进行判断
且“函数过程B”只需要写一次(可别跟我说把“函数过程B”写到一个函数里,写2次调用函数)
if(a && b) {
str += "a";
} else {
str += "b";
}
alert(str+"c");
alert的时候有2种可能"ac","bc"
想要优化成
if(a) {
if(b) {
// 这里只是举例,实际用时,可能是一大堆的函数过程
str += "a"; // 函数过程A
} else {
str += "b"; // 函数过程B
}
} else {
str += "b"; // 函数过程B
}
alert(str+"c");
类似这样的,也就是,假设b是一个比较复杂的函数,为了提高执行速度,只有当a为真的时候才执行b函数进行判断
上面的语句已经实现了这个功能,但“函数过程B”必须写2次
该如何优化才能做到
b只有a为真时才进行判断
且“函数过程B”只需要写一次(可别跟我说把“函数过程B”写到一个函数里,写2次调用函数)
当fun1返回true的时候 fun2就不会执行了
这不是常识么?
var a = true, b = true, str = "";
if(a && b) {
str += "a";
} else {
str += "b";
}
alert(str+"c");由于逻辑运算符的特性 已经是最优了
--------------------------------------帅签分割线-------------------------------------------------
举例举错了.......
var a = true, str = "", b = "a", c = function(d) {
alert("cfn");
return typeof d;
};if(a && (c(b) === "string" || c(b) === "number")) {
str += "a";
} else {
str += "b";
}
alert(str+"c");
上面这样的话,c函数就有可能被调用多次
var a = true, str = "", b = "a", c = function(d) {
alert("cfn");
return typeof d;
};var d = c(b);
if(a && (d === "string" || d === "number")) {
str += "a";
} else {
str += "b";
}
alert(str+"c");
这样的话,则c函数一定会被调用一次,即使a为false也是
var a = true, str = "", b = "a", c = function(d) {
alert("cfn");
return typeof d;
};if(a) {
var d = c(b);
if(d === "string" || d === "number") {
str += "a"; // 函数过程A
} else {
str += "b"; // 函数过程B
}
} else {
str += "b"; // 函数过程B
}
alert(str+"c");
这样虽然函数c只有当a为真时才会被调用一次,但“函数过程B”却必须写2次,当然可以把“函数过程B”“封装”成函数,但如果这样的话,我也就没必要发帖了...
想要的优化结果就是
函数c只有在a为真的情况下才被调用
“函数过程B”在不“封装”成函数的情况下,只需要写一次
好吧...上面错误的举例请直接无视吧...
a如果不为真 b就不会走 没有必要优化
var a = true, str = "", b = "a", c = function(d) {
alert("cfn");
return typeof d === 'string' || typeof d === "number";
};if(a && c(b)) {
str += "a";
} else {
str += "b";
}
alert(str+"c");
但函数c是已经封装过的函数,不会为了一个函数过程而去修改其内容
不过倒是可以再使用一个函数e来“封装”函数c...
刚怎么就没想到呢...果然...BOSS来公司的话,就会头脑卡壳啊...魂淡!别有事没事就来我这说些无关紧要的事啊!!
你的那个逻辑就是:如果为数字或字符串的话就返回true,这个逻辑有必要封装
的运算顺序是情况1:如果A为假 B不会运行 直接判断表达式为假情况2:如果A为真 再判断B为真 此时B才运行 如果B为真则表达式判断为真,如果B为假则表达式判断为假var a = true, b = true, str = "";
if(a && b) {
str += "a";
} else {
str += "b";
}
alert(str+"c");
这段已经符合要求了厄,LZ面壁吧