关于js中的return void function
记得第一次接到一个还算比较完善的项目时,当时工作经验还不到一年,心里很是没底,就去网上找了相关的js代码来看,可没想到一看就傻眼了,到处都是这种形式:
1 2 3 |
function ret1(t) { return 0 == t.length || " " == t ? void showMessage("0") : (showMessage("1"),void $("#test").html("")); }; |
相信有点基础的都给我一样,首先想到的是三目运算符。但如果按我们的理解,肯定都会写成下面这样的比较多吧
1 |
0 == t.length || " " == t ? showMessage("0") : (showMessage("1"),$("#test").html("")); |
所以这里有两点困惑:1、为什么有个return;2、为什么执行方法的前面有个void。
首先解释第一个,其实到现在,我都没完全整明白,网上到处搜也搜不到答案。为什么像下面那样好好的一行代码,非要写得这么画蛇添足,也许是背后有什么其他的原因吧。就像定义插件时,高手都喜欢在前面写个分号,而小白看了就觉得多余一样。通常来说,我们都是return一个变量,对象,函数什么的居多。但如果后面要跟多个语句,我们都是用逗号隔开,Js会按常规的写法执行,而返回的是最后一个语句的值。比如:return a=100,b=20;其实就是我们平时写的a=100;b=20;return b;
关于void,我们知道,在js中,用void修饰的变量值为undefined,这就是为什么有时候会看见别人的代码里出现return void 0 之类的语句。就上面那个function来说,如果前面没有return,执行方法的前面根本不用考虑返回值的问题,所以就用不着在前面加个void。但有了return,就不一样了。我们看下面的代码:
1 2 3 4 5 6 7 8 9 10 |
function showMessage(message){ alert(message); }; var t = "hello"; function ret1(t) { return 0 == t.length || " " == t ? void showMessage("0000") : (showMessage("1111"),$("#test").html("")); }; ret1(t);//1111 var ttt = ret1(t); alert(ttt);//这里会弹出一个对象 |
首先,function showMessage()为无返回值的函数,故它的返回值为undefined,但对于$(“#test”).html(“”)就不一样了,它操作了一个jquery对象,因为前面有个return,而上面我们说了,return返回的,就是最后一个语句的结果,所以这里就相当于是把操作的jquery对象return出去了。但如果我们在前面加个void,就不一样了:
1 2 3 4 5 |
function ret1(t) { return 0 == t.length || " " == t ? void showMessage("0000") : (showMessage("0000"),void $("#test").html("")); }; var ttt = ret1(t); alert(ttt);//undefined |
这里虽然也是返回一个对象,但因为它被void修饰了,所以为undefined。
发表评论