2015-12-08 81 views
3

這些結構是否相同,沒有副作用?在一次運行中分配並返回一個變量

// First variant 
var a; 
var assignVar = function(){ return a = 10; } 
var b = assignVar() 

// Second variant 
var a; 
var assignVar = function(){ a = 10; return a; } 
var b = assignVar() 

我可以給一個變量賦值並同時返回嗎?或者我應該先將它分配,然後返回?是否有任何警告和不同的行爲?

+0

是的,他們是完全一樣的,分配返回值等 – adeneo

+0

不是很維護/可讀。 –

+0

當然,從一個IIFE返回到沒有,是沒有意義的。 – adeneo

回答

3

是的,這是安全的,兩個功能都是相同的。幾乎所有語言的賦值運算符都被嚴格定義爲返回指定的值,我知道的唯一例外是像C++這樣的語言,您可以在其中重載運算符。在Javascript分配中,總是'返回'分配的值。

相關權限爲ECMAScript 2015 specification section 12.14.4,其中所有控制路徑都以「Return rval」退出,這是操作員右側的部分。

0

你可以做第一種方法。我會將它包裝在parens中,儘管你和其他人都知道你正在爲變量做些什麼,而且你會看起來兩次。

(function(){ return (a = 10) })() 
0

我會更好地做這樣的

var a = (function(){ return 10; }()) 
+0

您可能想要添加說明。目前還不清楚爲什麼你的答案比OP的實施「更好」 - 而且你沒有真正回答原來的問題。 – arthurakay

+0

我剛剛提供了第三種替代方案,我更喜歡而不是問題中提供的(編輯之前)。在這種微不足道的情況下,沒有顯着差異,它只是更乾淨,也許更快。 – Konst

相關問題