繁体   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