V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
whatisnew
V2EX  ›  JavaScript

应该给每一个方法都加上 return false 吗?

  •  
  •   whatisnew · 2015-05-22 13:20:59 +08:00 · 2865 次点击
    这是一个创建于 3268 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt 是否应该给每一个方法都加上 return false...

    var class = {
      method: function(arg) {
        if (arg) {
          return arg.argv;
        }
        return false;
      },
    
      get: function() {
        // 此次省略一堆...
        return false;
      },
    
      set: function() {
        // 此次省略一堆...
        return false;
      },
    };
    
    class.method('argc argv');
    
    16 条回复    2015-05-24 00:10:36 +08:00
    wesley
        1
    wesley  
       2015-05-22 13:40:16 +08:00
    不应该,如果你真要退出一个无返回值的方法,就用return ;
    whatisnew
        2
    whatisnew  
    OP
       2015-05-22 13:46:14 +08:00
    @wesley 那应该不写 return 吗?如果是执行一个事件的话?
    jarlyyn
        3
    jarlyyn  
       2015-05-22 13:48:49 +08:00
    为什么要加,有什么含义?
    morethansean
        4
    morethansean  
       2015-05-22 13:56:29 +08:00
    不需要的话,return 都不用写啊。你强行加个 return false 木有任何意义。
    whatisnew
        5
    whatisnew  
    OP
       2015-05-22 14:04:36 +08:00
    @jarlyyn 比如执行 class.set 他执行完自动 return 了 undefined 。。。

    听说加 return false 可以阻止冒泡什么的

    大家一般都是怎么做的呢?
    wind4
        6
    wind4  
       2015-05-22 14:07:05 +08:00
    undefined !== false
    whatisnew
        7
    whatisnew  
    OP
       2015-05-22 14:07:58 +08:00
    @wind4 undefined 有o(n)种可能啊
    morethansean
        8
    morethansean  
       2015-05-22 14:12:09 +08:00
    @whatisnew ……你这些方法跟事件 handler 有什么关系。要阻止 dom 事件冒泡也是根据需求啊,又不是随便一个 handler 都需要阻止冒泡,你随便阻止冒泡弄出一大堆别人调试都很难发现的 bug 那时候才蛋疼。

    你的API 在定义的时候,如果是没有返回值的,那你管函数默认返回什么呢?undefined 也好你自己强行返回了个 false 也好,有什么意义呢?如果你的 API 定义就是要有返回值的,那就按照约定做返回啊。
    est
        9
    est  
       2015-05-22 14:14:41 +08:00
    return alert("出错了!")
    jarlyyn
        10
    jarlyyn  
       2015-05-22 14:37:08 +08:00
    @whatisnew

    你是指网页写js的时候可以通过return false来阻止默认时间的执行?
    yyfearth
        11
    yyfearth  
       2015-05-22 14:39:09 +08:00
    @whatisnew 阻止冒泡不推荐用return false了
    应该用e.stopPropagation()
    阻止默认行为用e.preventDefault()
    阻止冒泡并且阻止其他handler继续用 e.stopImmediatePropagation()

    return false 相当于 e.stopPropagation() + e.preventDefault()
    不过还是用这些方法比较好 一个是可以在最前面阻止 避免出错导致return false没有执行
    而且控制也更加明确 可以不return继续执行下面的代码

    有些custom API需要event handler return false阻止执行 那么就按照API的定义使用就是
    wind4
        12
    wind4  
       2015-05-22 16:14:32 +08:00
    我想知道,你返回一个false是什么意思?
    FrankFang128
        13
    FrankFang128  
       2015-05-22 16:17:11 +08:00 via Android
    楼主强迫症
    kfll
        14
    kfll  
       2015-05-23 09:28:04 +08:00 via iPhone
    没有返回的方法,个人比较推荐加 return this
    domino
        15
    domino  
       2015-05-23 22:10:31 +08:00
    弱弱的问下,这写法具体叫做什么
    var class = {
    method: function(arg) {
    },
    get: function() {
    },
    set: function() {
    },
    };
    banri
        16
    banri  
       2015-05-24 00:10:36 +08:00 via iPhone
    @domino 封装
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   748 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 21:20 · PVG 05:20 · LAX 14:20 · JFK 17:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.