详解JavaScript中return的用法


Posted in Javascript onMay 08, 2017

最近,跟身边学前端的朋友了解,有很多人对函数中的return的用法和意思理解的比较模糊,这里写一篇文章跟大家一起探讨一下return的用法。

 

  1定义   

return,从字面意思来看就是返回,官方定义return语句将终止当前函数并返回当前函数的值;可以看下下面的示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <script>
  function func1(){
   while (true){
    return 1;
   }
  };
  alert(func1());
 </script>
</head>
<body>
</body>
</html>

可以看到我在函数里面写了一个死循环,然后在下面调用,在没有写return语句时浏览器会一直执行循环内的语句,直接卡死;

而写了return语句后,直接中断了函数,并且给函数返回了一个数值1,意思就是当函数执行后,函数体将被赋值为函数的返回值,这里会被返回1;

详解JavaScript中return的用法

详解JavaScript中return的用法

2写法

官方定义return后面可以跟一个value,也就是说可以跟javascript中的任何数据类型,数字,字符串,对象等,当然也可是再返回一个函数,举个栗子:  

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <script>
  function func1(){
   return function (){
    alert(1);
   }
  };
  alert(func1()); //!func1()(); 这个注释是通过自执行函数调用返回的函数
</script> 14 </head> 15 <body> 16 17 </body> 18 </html>

示例图片:

详解JavaScript中return的用法

当然是函数就可以调用,我们可以写成!func1()();这里很好理解,func1();我们打印出来看了就是return后面跟的匿名函数,那么我们就可以通过自执行函数的形式来调用,这里通过!函数体();的形式来调用。可以将注释里的代码拿出来试验一下:

详解JavaScript中return的用法

   3练习

   

(1)练习1

那么既然可以返回一个函数,我们就将下面的代码改写为一个回调函数的形式:

原代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <script>
 if(prompt('输入数字1')==1){
  !function (){
  alert('输对了');
  }()
 }else{
  !function (){
   alert('输错了');
  }()
 }
 </script>
</head>
<body>
</body>
</html>

改写后:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <script>
  function func1(){
   if(prompt('输入数字1')==1){
    return function (){
     alert('输对了');
    }
   }else{
     return function (){
     alert('输错了');
    }
   }
  }
  !func1()();
 </script>
</head>
<body>
</body>
</html>

改写前是通过if语句来判断执行哪个函数;改写后是通过if语句判断返回哪个函数,然后在下面调用;并没有什么意义只是帮助我们理解一下return;

(2)练习2

通过return语句来实现一个循环。

思路:既然return语句可以返回一个函数,那么就是说可以返回它自己本身,在后面调用时就能实现一个循环的功能;

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <script>
  var i=1;  //定义循环变量
  function func1(){
   i++;  //改变循环变量
   if(i<5){


//小括号为循环条件
    document.write(i+'<br>');  //这里是循环体
    return func1();
   }     
  }
  !func1()();    //调用函数
 </script>
</head>
<body>
</body>
</html>

各部分在循环里所起的作用已经在代码内的注释写出,博友们可以自己去试验一下,下面为执行效果图:

详解JavaScript中return的用法

  4定义javascript自带方法中的回调函数  

前面我们已经对return的用法做了很详细的研究,下面我们对javascript自带方法中的回调函数做一下研究,这里以数组中的sort();排序方法为例:

我们都知道sort();中可以写一个回调函数来给数组指定排序的规则;示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <script>
  var arr = [1,3,2,6,5];
  arr.sort(function(a,b){
   return a-b;
  });
  console.log(arr); 
 </script>
</head>
<body>
</body>
</html>

执行效果图:

详解JavaScript中return的用法

那么为什么会这样呢,跟return又有什么关系呢,相信有很多博友都很困扰,下面我们来做个实验,将return后面的a-b换成-1;改动较小,就不再上传代码,朋友们可自己手动修改;

执行效果图:

详解JavaScript中return的用法

可以看到,当返回一个负数-1时,没有发生变化;下面我们将return后面的a-b换成0;

执行效果图:

详解JavaScript中return的用法

可以看到,当返回0时,没有发生变化;下面我们将return后面的a-b换成一个正数1;

执行效果图:

详解JavaScript中return的用法

可以看到,当返回1时,数组顺序被反转了;

那么,我们可以得出以下结论:

当a-b<=0时,a在前,b在后;

当a-b>0是,a在后,b在前;

到这里,肯定有博友对a和b到底是啥有了疑问,我们可以通过下面的代码打印出来:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <script>
  var a = [1,3,2,6,5];
  a.sort(function(a,b){
   console.log('a是:'+a+'\t b是:'+b+'<br>');
   return a-b;
  });
  console.log(a);
 </script>
</head>
<body>
</body>
</html>

执行效果图:

详解JavaScript中return的用法

return a-b;升序排列我们已经详细的去分析了,那么降序return b-a;就很简单了,说白了就是return -(a-b);也就是在a-b的基础上作了反转变成降序。

到这里我们可以得出一个总体的结论,return回去的值为一个数值,sort();方法会根据数值的正负对数组的各个部分进行排序。

以上所述是小编给大家介绍的JavaScript中return的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
通过JS 获取Mouse Position(鼠标坐标)的代码
Sep 21 Javascript
js分解url参数(面向对象-极简主义法应用)
Aug 09 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
Dec 04 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
Oct 23 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
Oct 26 Javascript
详解js私有作用域中创建特权方法
Jan 25 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
JS 拦截全局ajax请求实例解析
Nov 29 Javascript
javascript兼容性(实例讲解)
Aug 15 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 Javascript
使用AutoJs实现微信抢红包的代码
Dec 31 Javascript
如何使用angularJs
May 08 #Javascript
关于foreach循环中遇到的问题小结
May 08 #Javascript
js下载文件并修改文件名
May 08 #Javascript
JS将unicode码转中文方法
May 08 #Javascript
js实现点击切换checkbox背景图片的简单实例
May 08 #Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 #Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
May 08 #jQuery
You might like
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
python逆序打印各位数字的方法
2018/06/25 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Django框架表单操作实例分析
2019/11/04 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
python+requests接口自动化框架的实现
2020/08/31 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
css3的transform中scale缩放详解
2014/12/08 HTML / CSS
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
美德好少年事迹材料
2014/01/19 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
2014年接待工作总结
2014/11/26 职场文书
毕业典礼致辞
2015/07/29 职场文书
只用Python就可以制作的简单词云
2021/06/07 Python