我创建了一个新的全局对象,然后将所有内容放到该新对象中,这样它就不会干扰其他任何人所做的任何事情。调用document.ready()函数后,由于未知原因,该函数被移至window.bf。我将其简化为一个简单的示例。有人对正在发生的事情有任何想法吗?

<html>

<head>
  <title>Test</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <script>
    debugger;
    var bf = {}; //	Namespace

    bf.vars = [];
    bf.vars['onclick'] = "";

    $(document).ready(function() {

      bf.noop = function() {}

      bf.noop();
      window.bf.noop();

    });
  </script>
</head>

<body>Test</body>

</html>


因此,我得到了两个“bf”。一个是原始的全局对象,第二个是window.bf对象。我的问题是:最初,全局对象中包含所有功能和变量。现在,全局变量除了bf.vars(数组)之外什么都没有。现在,其他所有内容都在window.bf对象中(包括本应放入全局bf.vars数组中的所有内容,但我从未要求这样做)。

直到上周五(9/25/2015)都没有发生。现在可以了。

更新:我只是尝试删除document.ready()函数。如果删除document.ready()部分,则全局bf对象将返回为全局变量。因此,这似乎与jQuery本身有关。

在任何人问之前:使用document.ready()的原因是因为我定义的某些函数引用了需要加载的位置,而jQuery表示要使用document.ready()函数以确保所有元素在执行开始之前已加载。 bf.noop()函数只是给出一个函数示例,并表明该函数不再出现在全局bf对象中。

使用document.ready()截屏:

javascript - jQuery-函数移至window.function-LMLPHP

没有document.ready()的屏幕截图:

javascript - jQuery-函数移至window.function-LMLPHP

更好?

最佳答案

在脚本标签的顶级范围中,所有变量都隐式地附加到window

好消息是,您实际上没有两个bf对象,只有一个具有两种访问方式。

var bf = {};
bf.foo = "bar";
document.getElementById('output').innerHTML = JSON.stringify(window.bf, undefined, 4);
<div id="output"></div>

关于javascript - jQuery-函数移至window.function,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32847945/

10-09 00:28