2016-03-25 28 views
1
var universe = true; 
var string = 'hello ' + (() => { 
    if (universe = true) { 
     return 'universe'; 
    } else { 
     return 'world'; 
    } 
}); 

爲什麼不返回'hello universe'?我怎樣才能做到這一點?我正在嘗試動態構建一個字符串 - 我的具體用例是創建HTML。如何使用連接的匿名函數追加到字符串?

+0

您也有一個錯誤的位置:'如果(宇宙=真)' - 這是一個賦值語句。你最有可能的意思是'universe === true' –

+0

爲什麼首先使用函數呢?有條件的運算符看起來更簡短。出於某種原因您是否需要新的範圍? –

+1

這味道就像一個重複的問題。 – 8protons

回答

1

你需要調用匿名函數:

var universe = true; 
var string = 'hello ' + (() => { 
    if (universe = true) { 
     return 'universe'; 
    } else { 
     return 'world'; 
    } 
})(); // <--- notice() here 
+0

謝謝。太棒了。 –

2

你只是用串接函數參考,這將導致串連用於函數對象的原始到目標字符串。所以在這種情況下,您必須調用該函數,而不是直接連接它。

var universe = true; 
var string = 'hello ' + (() => { 
    if (universe == true) { 
     return 'universe'; 
    } else { 
     return 'world'; 
    } 
})(); 

而且你的代碼的最可讀的版本是,

var universe = true; 
var fetchResult =() => (universe) ? 'universe' : 'world'; 
var string = 'hello ' + fetchResult(); 

另外請注意,你是在分配一個值if語句而不是比較它。那麼,如果陳述將被評估爲true塊,因爲universe = true將始終評估爲true

+0

我建議使用** bold **或* italic *文本來表示強調併爲實際代碼留下'code blocks'。 –

+1

@FelixKling我習慣了這一點。將嘗試改變它。 :) –

+0

我很欣賞你的深度。我現在明白,我需要在最後添加一組括號。 「函數的原始值」是什麼意思? –

1

更簡潔的方式

var universe = true; 
var string = 'hello ' + (() => universe ? 'universe' : 'world')(); 
+0

這種情況下有什麼功能? –

+0

@FelixKling我同意你的觀點,沒有任何意見,它只是OP功能的縮短版本,*少代碼的錯誤*。 OP在'if'語句中有一個錯誤 – isvforall