JavaScript在一行上定义并返回一个变量

JavaScript在一行上定义并返回一个变量,javascript,Javascript,在JavaScript中,如果我想返回一个变量,但不想修改它或将它泄漏到全局范围中,我可以像这样在一行中定义并返回它吗 return var Foo = 'bar' 但是,我想我在任何地方都没有看到过,我更常见的是: var Foo = 'bar' return Foo 第一个变量没有那么多冗余,但这是一种不好的做法吗?好吧,您肯定需要在您想要的范围内声明变量。然后可以设置值,并在一行中返回: var Foo; // Declares Foo in this scope, though th

在JavaScript中,如果我想返回一个变量,但不想修改它或将它泄漏到全局范围中,我可以像这样在一行中定义并返回它吗

return var Foo = 'bar'
但是,我想我在任何地方都没有看到过,我更常见的是:

var Foo = 'bar'
return Foo

第一个变量没有那么多冗余,但这是一种不好的做法吗?

好吧,您肯定需要在您想要的范围内声明变量。然后可以设置值,并在一行中返回:

var Foo; // Declares Foo in this scope, though this expression has no L-Value
return (Foo = 'bar'); // Sets Foo to 'bar' and returns the value of Foo

但你为什么要这么做还是有问题的。理想情况下,Foo将在某个父范围的其他地方声明。或者,您将返回一个包含Foo值的新函数。

那么,您肯定需要在您想要的范围内声明变量。然后可以设置值,并在一行中返回:

var Foo; // Declares Foo in this scope, though this expression has no L-Value
return (Foo = 'bar'); // Sets Foo to 'bar' and returns the value of Foo

但你为什么要这么做还是有问题的。理想情况下,Foo将在某个父范围的其他地方声明。或者,您将返回一个包含Foo值的新函数。

我不明白您为什么要这样做,因为一旦返回,您就超出了范围

照办

return 'bar';

我不明白你为什么要这么做,因为一旦你回来,你就超出了范围

照办

return 'bar';

如果不了解您要做的事情,就很难给出有用的答案,但是:

return var Foo = 'bar'
不是有效的JavaScript,所以您当然不能这样做

我同意你的第二个例子是多余的——如果你只想在返回变量时引用它,那么在函数中声明变量是没有意义的。消除冗余的方法是根本不声明变量:

function exampleFunction() {
    return 'bar';
}

如果不了解您要做的事情,就很难给出有用的答案,但是:

return var Foo = 'bar'
不是有效的JavaScript,所以您当然不能这样做

我同意你的第二个例子是多余的——如果你只想在返回变量时引用它,那么在函数中声明变量是没有意义的。消除冗余的方法是根本不声明变量:

function exampleFunction() {
    return 'bar';
}


为什么不直接返回“bar”?不,你不能那样做,正如你将得到的SyntaxError所指出的那样。它能实现什么?返回值后,变量将不再存在。@JoshuaDwire:可能是闭包。@caffinatedmonkey:您会注意到,在您的示例中,函数没有显式返回任何内容。据我所知,这不是JacksonGariety所问的。为什么不简单地返回“bar”?不,你不能那样做,正如你将得到的SyntaxError所指出的那样。它能实现什么?返回值后,变量将不再存在。@JoshuaDwire:可能是闭包。@caffinatedmonkey:您会注意到,在您的示例中,函数没有显式返回任何内容。据我所知,这不是JacksonGariety所问的。@rae1n:因为Paul说没有意义,但Paul实际上并不知道这一点。@user2736012重点在哪里?我同意,没有任何意义。。。返回后,您就超出了范围…@Neal:如果在函数中创建的新闭包需要使用变量,则需要声明该闭包。@Neal嗯,函数之前可能通过将对局部函数的引用填充到全局变量中导出了局部函数,但这使问题变得毫无意义;在包含另一个函数声明的函数中保存一行代码的动机是什么?@Neal:当你使用var时,它会被提升。因此,如果可以使用OP所需的语法,则可以同时声明、初始化变量并将其值赋给return语句,并且在上面创建的任何处理程序在调用时都可以访问已初始化的变量。@rae1n:因为Paul说没有意义,但保罗实际上并不知道这一点。@user2736012重点在哪里?我同意,没有任何意义。。。返回后,您就超出了范围…@Neal:如果在函数中创建的新闭包需要使用变量,则需要声明该闭包。@Neal嗯,函数之前可能通过将对局部函数的引用填充到全局变量中导出了局部函数,但这使问题变得毫无意义;在包含另一个函数声明的函数中保存一行代码的动机是什么?@Neal:当你使用var时,它会被提升。因此,如果可以使用OP所需的语法,则可以同时声明、初始化变量并将其值赋给return语句,并且在上面创建的任何处理程序在调用时都可以访问已初始化的变量。@dandavis-无技术原因,我只是更喜欢它的外观。@dandavis-没有技术原因,我只是更喜欢它的外观。