脚本标记之间的JavaScript函数范围

时间:2012-04-23 23:16:29

标签: javascript html jsp

我有两个不同的JSP,Java后端连接在一起并发送回同一个呈现的HTML页面。

每个JSP都有自己的<script>块,并定义该块内的函数:

JSP#1:

<script type="text/javascript">
    function blah() { ... }
</script>

JSP#2

<script type="text/javascript">
    function foo()
    {
        blah();
    }
</script>

就像我说的那样,后端将这些添加到HTTP响应中,并在同一请求期间将它们发送回浏览器。

当我在浏览器中运行此页面时,我可以立即告诉blah()在调用foo()时没有执行。我在Firebug中看到控制台错误,指出 blah()未定义。我想知道blah()是否只在自己的<script>标记中包含范围,同样对foo()也是如此。 这是这种情况,还是其他问题呢?

当我去查看页面源时,我看到了两个脚本块和两个函数。这告诉我服务器端正在生成/呈现所有内容,但也许我的方法本质上是错误的(定义不同脚本标记内的函数)。提前谢谢。

3 个答案:

答案 0 :(得分:5)

所有这些都是全球性的。他们可以看到对方。问题是当他们被定义并相互呼叫时。

您应该按此顺序定义和调用它们:

  1. FOO
  2. 打电话给foo
    • 执行foo并调用bar
    • 执行

答案 1 :(得分:1)

您可以调用这样的函数:

  (function($) {

     var namespace;
         namespace = {
                     something : function() {
                                             alert('hello there!');
                                            },
                      bodyInfo : function() {
                                             alert($('body').attr('id'));
                                            }
                     };
         window.ns = namespace;
    })(this.jQuery);

   $(function() {
              ns.something();
              ns.bodyInfo();
   });

答案 2 :(得分:0)

在JavaScript中定义范围的唯一内容是函数,因此您的问题不是范围问题。你最有可能不是调用foo(),你在定义blah()之前调用它,或者你在某处有语法错误。也许您可以发布整个HTML页面,以便我们可以看到正在发生的事情。