为什么写一个永远不会返回值的函数

时间:2014-05-07 20:16:55

标签: javascript function

我正在阅读一本非常全面的javascript编程书。在语言基础的“功能”部分,我得到了以下内容:

“也可以在不指定返回值的情况下使用return语句。当以这种方式使用时,函数会立即停止执行并返回undefined作为其值。这通常用于不返回值的函数早期的函数执行,如下例所示,不会显示警告:“

function sayHi(name, message) {
return;
alert(“Hello “ + name + “, “ + message); //never called
}

我试图理解为什么有人会这样做。为什么要写一个返回“undefined”的函数?我已经尝试使用谷歌搜索,并搜索,但没有太多的运气,虽然这可能是因为我没有正确地描述我的搜索,因为我正在学习js。

任何人都可以给我一个真实世界的例子,告诉我这可能有用,以便我能理解吗?

6 个答案:

答案 0 :(得分:6)

通常这是一个有条件的回报。像

这样的东西
function calculateSomething(obj, condition) {
   if (condition !=0 ) return;

   obj.data = obj.data * 42;
}

在这种情况下,如果某些条件失败 - 函数立即退出。否则,传递对象中的数据将被修改。

答案 1 :(得分:2)

您提供的功能无用......

然而,并非每个功能都需要返回一些东西。有时一个功能可以做其他事情"其他地方"并且返回的值无关紧要。

答案 2 :(得分:1)

该功能可能有副作用,例如改变页面状态。然后,调用者可能不会期望任何返回值。

答案 3 :(得分:1)

在我看来,从大师那里学到了,这里的想法只是暂时禁用该功能。因此,如果您需要向sayHi()调用x个函数,例如在转发器中或分散在多个文件上,那么这个想法对于没有值的return;来说非常有用。有用?是的,为了避免注释掉代码块,但就是这样。

将此保留在开发环境中,最初将进入www你不应该这样写它,并始终确保:当一个函数必须返回“某事时“然后,无论条件如何,”某事物“总是有价值的。具有最低值a boolean => return false;。这计算该函数内的每个代码块=> for if else while ...

/* INCORRECT: it only returns something conditionally */
function do(something){
    if (condition){
        return false;
    }
}

/* CORRECT: it returns value no matter what the condition */
function do(something){
    if (!condition){
        return true;
    }

    return false;
}

/* OPTIMIZED: a lot of ideas can be optimized, especially when returning booleans */
function do(something){
    return !condition;
}

规则仅适用于您要编写正确代码的情况。使用jslint,jshint或re-sharper等工具有助于理解编写ecmascript有效代码的基本原则。由于并非每个人都了解这些规则,因此所有示例都会产生相同的结果。在“它工作,但它不是有效的代码”的感觉。

答案 4 :(得分:0)

因为JS函数是一个对象(具有:Attributs +方法)

并且,对象应该具有可以未定义的值。

证明是

function sayHi(){}

可以像对象一样处理它甚至调用它:

var returnedValue=sayHi.call() ;

如果sayHi未返回任何内容,returnedValue将为undefined

答案 5 :(得分:0)

示例如果要使用类我确定它将使用setter函数为实例属性赋值。

像这样:

function Something(val) {
    this.value = val;
}