<script type="text/javascript"> 今天忽然想知道函数为什么不写return语句,为什么会隐式返回 undefined 先来看一个例子, function Test2(){ console.log("222"); } console.log( Test2() ); // 222,undefined那么问题来了,222是我们在控制台输出的,那undefined又是从哪里冒出来的呢? 之前看教程,里面说到,如果函数没有返回值,就会返回undefined ,这里结果是对的, 可是这里面究竟发生了什么呢? 我们知道,函数可以用return语句,用于返回一些数据,可是这里我们 没有写return语句,那么undefined是从哪里出来的呢? 我们猜测,会不会系统在内部隐式的执行了一个return语句 下面来验证我们的猜想: 看这个例子: function Test2(){ console.log('222'); return '333'; } console( Test2() ); // 222,333 alert( Test2() ); //222,333 这里倒是没有出现undefined,为什么呢? 因为我们自己定义了return语句。 这里相当于 console.log('222'),console.log('333')同理alert也是一样 因为我们显式的写了rerun语句,系统默认的return语句就被我们覆盖了, (一个函数中只有第一return语句个有效,函数遇到return语句整个函数就结束了)。 注意:这里,如果我们写成return ; 就相当于系统默认的加的就那句return, 只是我们自己写了。得到的效果是一样的。 看看这个: function Test3(){ console.log("444"); return ; // 也相当于return undefined; 注意这里没有双引号,不是字符串,是一种JS的数据类型。 } console.log( Test3() ); // 444,undefined 确实和系统中的效果一样 这就证实了,如果没有显示的写return语句,系统内部确实是执行隐式执行一个return ; 总结: 也就是说,在JS中每一个函数中都有会执行一个return语句, 如果我们自己没有显式的写return语句,系统会默认的在函数末尾加一句 return ;(并执行) 因为什么也没有返回,所以其它变量就什么也没接收到,变量的值就为undefined! 也就是说,相当于函数隐式的返回了 undefined ! console.log( Test3() ) 这句话相当于 var res=Test3(); console.log(res); 因此,第一个例子我们可以改成: function Test1(){ console.log(“111”); // return ; 因为没有返回任何值,因此其它变量就什么都接收不到,所以变量显示的就是 undefined; // 也相当于 return undefined; } 这大概就是 函数没有显示的使用return返回值,函数就会隐式返回undefined的原因了 </script>
转载请注明:副业 and 脱单研究所 » javascript函数中关于默认的返回值的猜测