资讯专栏INFORMATION COLUMN

使用angularjs.foreach时return的问题

Youngdze / 3153人阅读

摘要:解决方案用一个临时变量存储结果,当条件成立相同时将结果改为这样虽然能获得正确的返回值,但却无法阻止的循环想来应该是用在历遍数组元素来做一些操作,像这样的应该用循环比较好一些

在写一个比较数组对象中是否存在一个对象,存在返回true,失败返回false.在return时,发现并没有退出方法,自己测试了一下.

首先先写一个数组对象,然后用angularjs的forEach方法循环比较,当存在名字为2的对象时,输出true并返回,否则输出false并返回.

self.test = function() {
      var testArray = [{name: 1},{name:2},{name:3}];
      angular.forEach(testArray, function(value, key){
        if (value.name == 2) {console.log(true + " pass the test");return;}
        console.log(value.name + " pass");
      });
      console.log(false + " pass the test");
      return false;
    }();

刚开始认为,当找到value.name == 2的元素时,方法就会直接返回,所以应该只输出1 pass,true pass the test然后程序结束,但输出结果却是这样的:

结果发现在forEach里的return 居然只起到了for循环里的continue作用.
再把forEach循环的返回值和执行函数的返回值打印出来:


forEach函数返回的是循环的数组,函数的返回值是false.说明在forEach里return 并没有奏效,仅仅起到了continue的作用.
去网上搜了一下,并没有原因说明..

经老师指导,找到了原因。在当初c和c++的学习时,我们总是习惯认为只要return就会跳出我们所定义的函数,确实return确实有退出函数的作用,然而在js中并不是return没有起到效果,他也确实起到了效果:
起初我们认为return后会跳出这个方法:

实则不然,他跳出的其实这个方法:

到这我们就明白了,return确实起到了返回方法的作用,但他返回的不是我们理想的方法。而是我们定义的匿名函数,在匿名函数返回后,angular.foreach()函数又开始下一次的遍历,于是就没有能达到我们想要的效果。

解决方案:用一个临时变量存储结果,当条件成立相同时将结果改为true:

self.test = function() {
      var testArray = [{name: 1},{name:2},{name:3}];
      var result = false;
      angular.forEach(testArray, function(value, key){
        if (value.name == 2) {result = true;}
      });
      return result;
    };
    console.log(self.test());

png](/img/bVbhHi8)
这样虽然能获得正确的返回值,但却无法阻止angular.forEach的循环,想来forEach应该是用在历遍数组元素来做一些操作,像这样的应该用for循环比较好一些.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98114.html

相关文章

  • 使用AngularJS构建应用遇到问题及解决方案(版本为1.3.9)

    摘要:最近在公司使用用完成了一个项目,在此记录一下过程中遇到的问题及解决方案。其他两种方法可参考站内文章控制器如何通信结语以上为我在编写一个应用时遇到的问题及解决方案,记录并分享出来,欢迎大家指正 最近在公司使用用AngularJS(1.3.9)完成了一个项目,在此记录一下过程中遇到的问题及解决方案。 使用$http服务发送ajax请求时后端无法判断请求是XMLHttpRequest 问题...

    cuieney 评论0 收藏0
  • 乐字节Java方法、调用、重载、递归

    摘要:关键字为跳出方法或返回值。总结如下接收变量方法名实参列表没有返回值,不能使用接收变量。四重载一般来说,功能点相同的方法才适合使用重载,重载必须满足如下要求必须是同一个类方法名必须相同参数列表不同注意方法重载与返回值无关。 一、概述 方法是指人们在实践过程中为达到一定目的和效果所采取的办法、手段和解决方案。 所谓方法,就是解决一类问题的代码的有序组合,是一个功能模块。编程语言中的方法是组...

    songze 评论0 收藏0
  • 精读《Function Component 入门》

    摘要:比如就是一种,它可以用来管理状态返回的结果是数组,数组的第一项是值,第二项是赋值函数,函数的第一个参数就是默认值,也支持回调函数。而之所以输出还是正确的,原因是的回调函数中,值永远指向最新的值,因此没有逻辑漏洞。 1. 引言 如果你在使用 React 16,可以尝试 Function Component 风格,享受更大的灵活性。但在尝试之前,最好先阅读本文,对 Function Com...

    Scholer 评论0 收藏0
  • JavaScript 编程精解 中文第三版 八、Bug 和错误

    摘要:幸运的是,使用符号创建的构造器,如果在不使用来调用,则始终会报错,即使在非严格模式下也不会产生问题。 来源:ApacheCN『JavaScript 编程精解 中文第三版』翻译项目原文:Bugs and Errors 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 调试的难度是开始编写代码的两倍。 因此,如...

    wujl596 评论0 收藏0
  • React Hooks入门: 基础

    摘要:当组件安装和更新时,回调函数都会被调用。好在为我们提供了第二个参数,如果第二个参数传入一个数组,仅当重新渲染时数组中的值发生改变时,中的回调函数才会执行。 前言   首先欢迎大家关注我的Github博客,也算是对我的一点鼓励,毕竟写东西没法获得变现,能坚持下去也是靠的是自己的热情和大家的鼓励,希望大家多多关注呀!React 16.8中新增了Hooks特性,并且在React官方文档中新增...

    mrli2016 评论0 收藏0

发表评论

0条评论

Youngdze

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<