簡體   English   中英

為什么使用函數參數。 全局變量?

[英]Why Use Function Parameters Vs. Global Variables?

是的,我知道這可能是一個非常愚蠢的問題,但這已經困擾了我一段時間。

好吧,所以我已經學習了一段時間的JavaScript並完全理解了一切。 .except函數“參數”(我相信它們被稱為)。

我被教導他們這樣工作:

 function test(number) { document.write(number); }; test(1); test(12); 

這對我來說非常有意義。 然而,最近,我遇到了一些有點不同的東西。

 var counterDays = document.getElementById('days'); var counterHours = document.getElementById('hours'); var counterMinutes = document.getElementById('minutes'); var counterSeconds = document.getElementById('seconds'); var date = new Date('December 28, 2016 00:00:00'); function updateTimer(date) { var time = date - new Date(); return { 'days': Math.floor(time / (1000 * 60 * 60 * 24)), 'hours': Math.floor((time/(1000 * 60 * 60)) % 24), 'minutes': Math.floor((time / 1000 / 60) % 60), 'seconds': Math.floor((time / 1000) % 60), 'total': time }; }; function startTimer(counterDays, counterHours, counterMinutes, counterSeconds, date) { var timerInterval = setInterval(function() { var timer = updateTimer(date); //Changes the text of the 'counter' counterDays.innerHTML = timer.days; counterHours.innerHTML = timer.hours; counterMinutes.innerHTML = timer.minutes; counterSeconds.innerHTML = timer.seconds; window.onload = function() { startTimer(counterDays, counterHours, counterMinutes, counterSeconds, date); }; 
  <span id="days">&nbsp;</span> <span id="hours">&nbsp;</span> <span id="minutes">&nbsp;</span> <span id="seconds">&nbsp;</span> 

我嚴重不明白的是,為什么updateTimer總是需要date的括號內,當變量date是在全球范圍內已經存在的變量。 startTimer相同。 我不明白為什么我需要傳遞它。為什么不只是訪問函數中的變量,因為它們確實具有全局范圍,並且完成它。 相反,我需要將變量作為參數傳入,以使函數工作。

我已經嘗試過,但是使函數工作的唯一方法是傳入變量。 這是為什么???

在我還在學習的時候,我在互聯網上搜索了有關函數及其參數的更多信息,但所有這些都向我展示了與我的第一個例子類似的東西。 我知道這可能只是我的頭腦,但對於我的生活,我只是不明白。

注意:我還在學習,很抱歉,如果整個問題都是愚蠢的。

此外,我遇到問題的JS代碼實際上不會運行。 這是因為我不想放入我的所有代碼,而只是我遇到的代碼。

相反,我需要將變量作為參數傳入,以使函數工作。

您不需要使用參數定義函數。 您可以利用更高范圍的變量來調用它們

https://developer.mozilla.org/en-US/docs/Glossary/Scope

這個:

var x = 'baz';
function foo(x) {
  return x;
}
foo(x);

會做同樣的事情:

var x = 'baz';
function foo() {
  return x;
}
foo();

編寫以參數作為輸入的函數有助於保持代碼模塊化和副作用免於許多其他好處......

1.)如果在較高范圍內無法訪問x,則第二個示例將始終拋出錯誤

2.)如果另一個函數改變了x的值,它將影響第二個示例的輸出,並且會導致應用程序中出現意外且可能難以調試的行為。 而我總能確定第一個例子的輸出

3.)讀取和維護以第一個示例的樣式編寫的代碼要容易得多

我看到你的代碼

var timer = updateTimer(date);

請在此處以及被調用函數中刪除日期參數。 現在,日期變量將在全局范圍內起作用。 所以它會

function updateTimer() 
{
//date variable will be present here as global variable    
 }
 var timer = updateTimer();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM