2016-06-16 2 views
1

ここの返信文は不要ですか?グローバルスコープに存在する変数を返すベストプラクティス?

var fahrenheit; 
var celsius; 
function cToFConvert() { 
     celsius = temperatureInput.value; 
     fahrenheit = celsius * (9/5) +32; 
     console.log(fahrenheit); 
     return fahrenheit; 
} 

return文を使用しない場合でもfahrenheit値を取得できます。変数がグローバルスコープで宣言されている場合、リターンの使用は冗長ですか?

+3

はいそれは冗長です。ただし、アトミックなメソッドを作成し、独自のスコープを使用するほうがずっと優れています。 – str

+3

'var = farenheit;'は 'var farenheit; 'でなければなりません –

+0

ええ、申し訳ありませんが、コードを正しくコピーしませんでした。編集されました。 @strプログラミングで「原子」をどういう意味ですか?私はまだこの言葉に遭遇していない。 –

答えて

5

機能およびpure function

機能を純粋に保つという概念は、副作用なしに機能を使用するという考えです。つまり、関数は独自のパラメータに依存し、パラメータにのみ関連するものを返す必要があります。

つまり、関数には入力と出力があるはずです。

この場合温度を変換するには、摂氏値があり、Farenheitで値を取得する必要があります。これは、任意の目的のために再利用可能で、変更せずにライブラリに挿入できる関数を記述する良い例です。

どのように動作しますか?

あなたは、入力に基づいて入力と出力を考えるかもしれません。

function convertCelsiusToFarenheit(celsius) { 
    return celsius * 9/5 + 32; 
} 

今、あなたが望む入力して機能を使用すると、変数

var myFarenheit = convertCelsiusToFarenheit(temperatureInput.value); 

それとも、値の束を変換したい場合、あなたはコールバック

としての機能を使用することができますへの出力を保存することができます
var myFarenheitData = [-10, 0, 10, 20, 30, 40].map(convertCelsiusToFarenheit); 

これを念頭に置いて、多目的関数を記述する方が簡単です。

0

ここで私は還元剤だと思いますが、これも有効な実装ではないと思います。代わりにあなたが行うことができます。

var cToFConvert = function() { 
var celsius = temperatureInput.value; 
var farenheit = celsius * (9/5) +32; 
console.log(farenheit); 
return farenheit; 
} 

、その後

var convertedValue = cToFConvert(); 

この情報がお役に立てば幸い!

1

メソッド外の変数での作業は避けてください。これが私の提案です。変数に渡し、パラメータとしてを返します。結果はです。メソッド外の変数を使用したい場合は、を返します。メソッド内の変数をすでに変更しているため、戻り値は冗長です。

function cToFConvert(celsius) { 
 
    return celsius * (9/5) + 32; 
 
} 
 
var celsius = 123; //temperatureInput.value; 
 
var farenheit = cToFConvert(celsius); 
 

 
console.log(farenheit);

+2

グローバル状態を変更する関数であっても値を返すことには、時にはメリットがあります。これは、グローバルがファンクションへの主な入出力であっても可能です: 'validateTemp(cToFConvert(x)); – Flexo

+0

私は、分かりやすくするために上の2行を削除し、単に 'var fahrenheit = cToFConv(123);'を指定することをお勧めします。 – Groo

2

グローバル変数を使用しないでください。

var farenheit; 
var celsius; 
function cToFConvert() { 
     celsius = temperatureInput.value; 
     farenheit = celsius * (9/5) +32; 
     console.log(farenheit); 
     return farenheit; 
} 

あなたはreturn statementを削除することができます。 いいえ、必要ありません。グローバル変数を使用する理由は、どこにでもアクセスできるため、どこでも価値を変えることができます。

代替のためにあなたが

function cToFConvert(celsiusValue){ 
    return celsiusValue* (9/5) +32; 
} 

を行うことができますそして、それはここに冗長ですが

var fahrenheit = cToFConvert(temperatureInput.value); 
0

のように呼んで、アプローチの両方が異なります。

ケース1:あなたはリターンを使用しません。

ここで、呼び出し元メソッドは値を期待しません。

例: var y=cToFConvert();

`y` will be `undefined`. 

ケース2:あなたはリターンを使用しています。

呼び出しメソッドは、値が返されることを期待しています。

例: var y=cToFConvert();

yの値はfarenheitです。

2つのうち、私は個人的には、関数呼び出しを見て関数が返すものを明確に示すことができるため、ケース1を優先します。また、他の答えで述べたように、抜け道がない限り、グローバル変数は使わないでください。

0

var farenheit=0, celsius=13; //definded in global space 
 
function cToFConvert() { 
 
     farenheit = celsius * (9/5) +32; //using global variables, no need to return 
 
} 
 
function checkFarenheit(){ 
 
    alert(farenheit); //checking global variable. 
 
} 
 
cToFConvert(); 
 
checkFarenheit();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

注:それは約束またはコールバックメソッドを使用し、より多くのエラーが発生しやすくなりますので、これは全く良い習慣ではありません。

関連する問題