2017-05-03 76 views
3

內嵌JavaScript函數後我看到不同的行爲,我不明白爲什麼。從內嵌JavaScript函數出現意外的不同行爲

考慮:

const someFunc = someParam1 => someParam2 => { 
    // doSomething 
} 

const someFuncIndirect = someParam2 => { 
    return someFunc(null)(someParam2) 
} 

// I expected parameter1 and parameter2 to be interchangeable but they are not 
const funcRef1 = someFunc(null) 
const funcRef2 = someFuncIndirect 

不同行爲的一個例子可以看這裏:https://codesandbox.io/s/0V2VyG7BV

第一個輸入框採用內嵌版本,並且第一後unfocusing輸入框的行爲怪癖字符已被輸入。第二個輸入框使用間接方法,不會遇到這個問題。我還注意到,如果我第一次在第二個輸入框中輸入文本,第一個輸入框中的焦點問題就會消失。

所有的redux-form看起來都和函數引用一樣,就是用它調用React.createElement。父母的調用者在兩者之間是不同的,但我想不出如何導致這種行爲。我錯過了什麼?

更新:修復了使用someParam2的間接函數示例。

回答

1

在你的代碼粘貼以上,parameter1將是一個函數,它param2和意志doSomething。另一方面parameter2將會是一個函數,當叫,將返回的返回值爲someFunc,這將與parameter1相同。所以,如果你想既parameters有同樣的表現,符合const parameter2 = someFuncIndirect

+0

EH合併someFuncIndirect()取代someFuncIndirect,無法發表評論我之前的評論了。這是一個更好的版本: 我修復了someFuncIndirect未使用'someParam2'並改變函數引用名稱的問題。 如果我這樣做:'funcRef1('test'); funcRef2('test')'結果應該是一樣的嗎? 'funcRef1'是一個函數,當''test''調用時'doSomething'。 'funcRef2'應該是一樣的;當用''test''調用時,它將執行'someFuncIndirect',它將執行'null'和'test'的'someFunc',它們與'funcRef1'傳遞的參數相同 –

相關問題