標籤:

js 中,不使用數組,不使用對象,可以 return 多組值嗎?

js


可以使用 function* 生成器函數(Generator Function)

function* returnMultiValues() {
yield 1;
yield 2;
yield 3;
return 4;
}

const values = returnMultiValues();
console.log(values.next().value); // 1
console.log(values.next().value); // 2
console.log(values.next().value); // 3
console.log(values.next().value); // 4


這個問題是不嚴謹的,因為即使使用數組和對象,普通函數 return 的也只有一個值,只是這個值(對象或數組)是一個複雜類型而已。 目前來說,真正能返回多組值的只有 ES6 的 generator function。


不知道題主的用意是什麼,js中 數組和對象都是把基本類型的值組合起來形成一組值。 除此之外還有一種組合值的辦法 就是閉包。

Let cos = a =&> b =&> n =&> n ==1?a:b

我們可以 return cos(1)(2)

取值

r(1) -&> 1

r(2) -&> 2

什麼? 如何組合多個值? 既然我們能組合兩個值就能組合無數個值

cos(1)(cos(2)(3))

剩下的不必我多說了吧

全程手機有誤請提醒


可以啊,你把多個值按一定的規則編碼成字元串,返回後再解碼就可以了。


都提到的 generator function 自然是「真正」返回多組值。

但為了幫助題主,還是再提一個類似 [] 和 {} 返回「多個值的方式」(似乎有人不太理解什麼意思,數組和對象所返回的本質上是一個複合結構,而我這段代碼只是用函數的形式模擬了這個複合結構)

function aaa(){
var value1 = 1
var value2 = 2
return function(index){
switch(index)
{
case 1:
return value1
case 2:
return value2
default:
return undefined
}
}
}


es6 函數生成器可以多次返回


沒有數組和對象還有set,generator給你用啊

其實嚴格上來說,我覺得沒有辦法可以滿足題主的要求,js中一個函數return一次後就不可能再return了

如果真的要這麼做,你可以考慮go,人家天生就支持return多個值


es6的Generator Function以及解構賦值


不知道es6中的解構賦值能不能滿足你的要求


你可以throw多組值


使用 DOM 樹、逗號分隔的字元串……


推薦閱讀:

TypeScript 的命運會不會和 CoffeeScript 一樣 ?
如何看待阿里開源的Rax框架?
瀏覽器端js有如何為本機生成固定的uuid?
有沒有必要將 DOM 結構緩存到本地?如果有,意義是什麼?
前端開發有沒有必要學習less,sass,coffee script等語言?

TAG:JavaScript |