【问题标题】:Function producing undefined variable产生未定义变量的函数
【发布时间】:2013-03-09 10:33:53
【问题描述】:

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

这将返回 url,但“course_syllabus_code”在 url 之后显示为未定义。我是 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>

【问题讨论】:

  • 你永远不会传入course_syllabus_code,所以它显示为未定义,因为它不存在。
  • 是不是少了一个问号?

标签: javascript var undefined-function


【解决方案1】:

您将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,除非有一个非常好的理由它必须是一个全局变量。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      这样试试

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

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

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

      【讨论】:

        【解决方案4】:

        此位不正确:

        javascript:syllabusLink()
        

        你缺少参数所以调用函数

        function syllabusLink(course_syllabus_code) {
        

        course_syllabus_code 的值未设置。

        【讨论】:

          【解决方案5】:

          请不要使用 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>
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-07-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多