2015-11-02 35 views
1

從我的理解,它是完全沒關係使用外部函數(不回調)的一些其他函數中:在JavaScript中使用純函數外部數據/操作的

function a() {}; 

function b() { 
    a(); 
}; 

而B仍能夠被稱爲純粹的功能,它不可以嗎?

這同樣適用於一些全球性的方法,如:

function c() { 
    return Math.sqrt(4); 
} 

C被仍被視爲純粹的,因爲雖然Math.sqrt是輸出C的範圍,Math.sqrt是一個純粹的方法。

這是所有罰款和良好的,但是當我使用這樣的外部變量:

window.isPlaying = false; 

function d() { 
    return window.isPlaying; 
} 

則變得不純的,對不對?

And ...在新功能中使用不純功能會使這個新功能不純,不是嗎?

function e() { 
    return new Date().getTime(); 
} 

我的推理好嗎?

+0

你能否提供定義:_pure function_? – Grundy

回答

3

純函數的定義指出,它必須爲相同的輸入返回相同的輸出,並且本身不會導致任何可觀察的副作用。如果函數受到非局部變量的影響,或者在輸入相同的情況下返回不同的輸出(如基於日期的計算),那麼它是不純的。

函數是否調用其他函數並不重要。功能性編程的全部要點和功能組成成爲程序,因此調用其他功能是日常工作的一部分。

你的分析是正確的:只要一個函數是純粹的,它調用的函數也是純粹的,它是純粹的。一個不純的功能雖然會使整個呼叫者鏈條不純潔。