2013-06-05 50 views
0

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

我用util中的所有函数对它进行了测试,返回了每个条件的结果并且它工作正常。然后,我在条件的任何结果中都用返回值进行了测试,但没有在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; 
     } 
    } 
}; 

回答

3

返回来的东西出来的功能传递给调用它(一般来说)的代码。因此,在不需要传回任何内容的函数中,例如removeEvent,它只是简单地修改其他内容的状态,这不是必需的。

getTarget的区别在于,正如它在名称中所表示的那样,您试图检索一个事物(在本例中为事件的目标对象)。因此,在调用getTarget的代码中,预计会有“某事”。正如你所说,没有回报,JS简单地传回undefined

+1

啊我没有注意到。谢谢。你的回答非常明确。所以,如果我要求的东西我需要返回来检索它,但如果我只是执行一个函数,我可能不需要返回。 –

+1

没错。偶尔(在某些语言中)使用空白返回来结束函数,在函数完成之前不会传递任何内容,但正如我在99%的情况中所说的那样,上述内容是正确的。 – n00dle

3

当你希望函数有一个实际的返回值,无论是字符串,布尔值,对象,函数等等时,你只需要声明返回值。如果函数在别的东西上操作,比如添加事件处理函数或添加属性到别的东西,返回值是不需要的。你可以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"} 
+0

+1提到链接的事情。我应该在我的帖子中引用它。 – n00dle

+0

谢谢,这也是非常有帮助的。 –

相关问题