我何时可以在javascript中省略return

时间:2013-06-05 23:03:21

标签: javascript return

当我意识到整个util obj中只有一个函数需要返回时,我正在练习跨浏览器代码,我想知道为什么其他人不需要返回。根据我的理解,JavaScript将在没有返回被调用时返回undefined,除非它是构造函数,在这种情况下它将返回它。

我用util中的所有函数测试它,返回每个条件的结果并且它起作用。然后我在条件的任何结果中使用out返回测试它,但是如果没有在getTarget函数中返回则它不起作用。

有人可以帮助我更好地理解这个原因吗?

jsFiddle在这里http://jsfiddle.net/SusannDelgado/CnWzE/

    var evtUtil = {
    //cross browser Events
    addEvent: function (el, type, fn) {
        if (typeof addEventListener !== "undefined") {
            el.addEventListener(type, fn, false);
        } else if (typeof attachEvent !== "undefined") {
            el.attachEvent("on" + type, fn);
        } else {
            el["on" + type] = fn;
        }
    },
    removeEvent: function (el, type, fn) {
        if (typeof removeEventListener !== "undefined") {
            el.removeEventListener(type, fn, false);
        } else if (typeof detachEvent !== "undefined") {
            el.detachEvent("on" + type, fn);
        } else {
            el["on" + type] = null;
        }
    },
    getTarget: function (event) {
        if (typeof event.target !== "undefined") {
            return event.target;
        } else {
            return event.srcElement;
        }
    },
    preventDefault: function (event) {
        if (typeof event.preventDefault !== "undefined") {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    }
};

2 个答案:

答案 0 :(得分:4)

返回用于将函数中的内容传递给调用它的代码(一般来说)。因此,在一个不需要传回任何东西的函数中,例如removeEvent只是修改其他东西的状态,就没有必要了。

getTarget的区别在于,正如名称所示,您正在尝试检索事物(在本例中是事件的目标对象)。因此,在调用getTarget的代码中,需要“某事”。如你所说,如果没有回报,JS只会传回undefined

答案 1 :(得分:4)

当你希望函数有一个实际的返回值时,你只需要声明return,无论是字符串,布尔值,对象,函数等。如果函数操作其他东西,比如添加事件处理程序或添加属性为其他东西,不需要返回值。您可以return this将该方法链接起来。

// An explicit return value
function getSomething() {
  return 'someValue';
}
var something = getSomething(); // something = someValue

// Operate on something else. No explicit return value
function changeSomething(something) {
  something = 'someOtherValue';
};
changeSomething(something); // something = someOtherValue

// Setting the variable to the return of a non-explicit return value
something = changeSomething(something); // something = undefined

// Return this to chain
var hash = {
  addProp: function (name, value) {
    this[name] = value;
    return this;
  }
};

hash.addProp('test', 'value').addProp('test2', 'value2'); // hash = Object {addProp: function, test: "value", test2: "value2"}