退货顺序的差异?

时间:2011-08-16 01:42:29

标签: javascript node.js

在Javascript中有以下区别:

return setTimeout(this._onTimeout, 1000*secs);

setTimeout(this._onTimeout, 1000*secs);
return;

前者并不总是运行超时,但后者总是如此。所以感觉就像是有区别,但我的google-fu未能找到原因。

3 个答案:

答案 0 :(得分:2)

> return setTimeout(this._onTimeout, 1000*secs);
  

> setTimeout(this._onTimeout, 1000*secs); return;
  

前者并不总是运行超时,但后者始终执行

你有倒退。如果代码正确执行,则第一个始终将返回对 setTimeout 的引用,该引用可用于取消它。第二个始终返回 undefined 。任何其他行为都不符合ECMA-262。

如果您遇到其他一些行为,代码中会出现错误,或者您发布的内容不是正在运行的内容。

答案 1 :(得分:1)

如果它被这样使用:

var obj = {
  set1 : function(secs) {
    return setTimeout(this._onTimeout, 1000*secs);
  },
  set2 : function(secs) { 
    setTimeout(this._onTimeout, 1000*secs);
    return;
  },
  _onTimeout : function() {
     alert("worked");
  }
};
clearTimeout(obj.set1(1));
clearTimeout(obj.set2(1));

只有第二行会导致_onTimeout实际触发。

答案 2 :(得分:0)

绝对没有区别。 尝试运行此代码:

(function() {
    return setTimeout(function(){console.log(1)}, 500);
})();
(function() {
    setTimeout(function(){console.log(2)}, 500);
    return;
})();

return不会影响JS解释器中的setTimeout调用。