函数产生未定义的变量

时间:2013-03-09 10:33:54

标签: javascript var undefined-function

我在学习管理系统中工作并创建一些自定义组件

这是返回url但是“course_syllabus_code”在url后显示为undefined。我是Javascript的初学者,已经在Google上查看了其他一些答案,但仍然无法理解。

基本上,用户可以打开代码并在顶部输入变量(将有多个)。接下来是所有魔法应该发生的地方......

输入的变量的结构不能改变,但可能没有以最佳方式执行“魔法”。

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

6 个答案:

答案 0 :(得分:5)

您将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>
    
  4. 我可能会选择#3,除非有一个非常好的理由它必须是全局变量。

答案 1 :(得分:1)

更改函数参数,因为它与局部变量的名称相同。

var course_syllabus_code = "72524";

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

您应该在course_syllabus_code属性中将syllabusLink传递给href

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

答案 2 :(得分:0)

试试这个

  var course_syllabus_code = "72524";

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

因为在onClick()中你没有传递任何参数。

course_syllabus_code 是全局变量。您可以直接在函数中访问。

答案 3 :(得分:0)

这位不正确:

javascript:syllabusLink()

您缺少参数,因此调用函数

function syllabusLink(course_syllabus_code) {

未设置course_syllabus_code的值。

答案 4 :(得分:0)

除了bookmarklet外,请不要使用javascript:协议。

更好的代码就是这个

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

答案 5 :(得分:0)

简单回答您需要在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是全局变量。您可以直接在函数中访问。