网站搜索

html - script 标签之间的 JavaScript 函数作用域


我有两个不同的 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() 也是如此。这里是这种情况吗,还是出了其他问题?

当我去查看页面源代码时,我看到两个脚本块和两个函数。这告诉我一切都是在服务器端正确生成/渲染的,但也许我的方法本身就是错误的(在不同的脚本标签中定义函数)。提前感谢。

答案#1

它们都是全局的。它们可以互相看到。问题出现在它们被定义并互相调用的时候。

你应该按照这个顺序定义并调用它们:

  1. 酒吧
  2. 福
  3. 调用 foo

    • foo 已执行并调用了 bar
    • bar 被执行

答案#2

你可以这样调用函数:

  (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();
   });