簡體   English   中英

函數產生未定義的變量

[英]Function producing undefined variable

我正在學習管理系統中工作,並創建了一些自定義組件

這將返回URL,但URL后面的“ course_syllabus_code”顯示為未定義。 我是Javascript的初學者,已經在谷歌上看了一些其他的答案,但仍然無法弄明白。

基本上用戶將能夠打開代碼並在頂部輸入變量(將有多個)。 然后在下面是應該發生所有魔術的地方...

輸入的變量的結構不能改變,但可能沒有以最佳方式執行“魔術”。

<script type="text/javascript">

var course_syllabus_code = "72524";

function syllabusLink(course_syllabus_code) {
location.href = 'https://foo.com'+course_syllabus_code;
}
</script>

<ul>
<li><a href="javascript:syllabusLink()"><img src="CourseButton3.png" />Syllabus</a></li>
</ul>

您將course_syllabus_code作為參數傳遞給函數,但調用函數時沒有任何參數。 當您調用參數少於其定義的函數時,您未傳遞的函數將通過值undefined來完成。 由於您已經為函數參數賦予了與全局相同的名稱,因此它會從函數中的代碼“陰影”(隱藏,隱藏)全局,而代碼將訪問參數。

你有三個選擇(只做其中一個 ,而不是全部):

  1. 通過刪除聲明的函數參數來使用全局變量:

     function syllabusLink() { // Removed here ------^ 
  2. 或者 ,將全局傳遞給您調用它的函數:

     <a href="javascript:syllabusLink(course_syllabus_code)"><img src="CourseButton3.png" />Syllabus</a> 

    我可能也改變了參數的名稱(這里我使用了scode ):

     function syllabusLink(scode) { location.href = 'https://foo.com'+scode; } 
  3. 或者 ,不要將course_syllabus_code全局,並將其傳遞給函數:

     <a href="javascript:syllabusLink('72524')"><img src="CourseButton3.png" />Syllabus</a> 

我可能會選擇#3,除非有確鑿的理由必須將其作為全局變量。

更改函數參數,因為它與局部變量的名稱相同。

var course_syllabus_code = "72524";

function syllabusLink(code) {
    location.href = 'https://foo.com' + code;
}

您應該將course_syllabus_code傳遞給href屬性中的syllabusLink

<a href="javascript:syllabusLink(course_syllabus_code)"><img src="CourseButton3.png" />Syllabus</a>

試試這樣吧

  var course_syllabus_code = "72524";

function syllabusLink() {
location.href = 'https://foo.com'+course_syllabus_code;
}

因為在onClick()中您沒有傳遞任何參數。

course_syllabus_code是全局變量。您可以直接在函數中訪問。

這個位不正確:

javascript:syllabusLink()

您缺少參數,因此調用該函數

function syllabusLink(course_syllabus_code) {

沒有設置course_syllabus_code的值。

除了bookmarklet,請不要使用javascript:protocol。

更好的代碼就是這個

<script type="text/javascript">

function syllabusLink(course_syllabus_code) {
   location.href = 'https://foo.com/course?syllabus='+course_syllabus_code;
   return false; // cancel link
}
</script>

<ul>
<li><a href="#" onclick="return syllabusLink('72524')"><img src="CourseButton3.png" />Syllabus</a></li>
</ul>

要么

這個

<script type="text/javascript">
var course_syllabus_code="72524";

function syllabusLink() {
   location.href = 'https://foo.com/course?syllabus='+course_syllabus_code;
   return false; // cancel link
}
</script>

<ul>
<li><a href="#" onclick="return syllabusLink()"><img src="CourseButton3.png" />Syllabus</a></li>
</ul>

答案很簡單,你需要通過course_syllabus_code在參數function 只需從function參數中刪除它並嘗試。

<script type="text/javascript">
var course_syllabus_code = "72524";
function syllabusLink() {
    location.href = 'https://foo.com'+course_syllabus_code;
}
</script>

原因是course_syllabus_code是全局變量。您可以直接在函數中訪問。

暫無
暫無

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

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