首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery -转移到window.function的函数

jQuery -转移到window.function的函数
EN

Stack Overflow用户
提问于 2015-09-29 15:25:14
回答 3查看 959关注 0票数 2

我创建了一个新的全局对象,然后将所有的东西放入到这个新对象中,这样它就不会干扰其他任何人所做的任何事情。调用document.ready()函数后,将以未知的原因将其移到window.bf。我把它简化为一个简单的例子。有人对发生了什么事有什么想法吗?

代码语言:javascript
复制
<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数组的所有东西,但我从未要求这样做。

直到上星期五(2015年9月25日),这种情况才发生。现在它做到了。

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

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

使用document.ready()的屏幕截图:

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

好些了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-29 15:30:10

在脚本标记的顶层范围内,所有变量都隐式地附加到window中。

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

代码语言:javascript
复制
var bf = {};
bf.foo = "bar";
document.getElementById('output').innerHTML = JSON.stringify(window.bf, undefined, 4);
代码语言:javascript
复制
<div id="output"></div>

票数 5
EN

Stack Overflow用户

发布于 2015-09-29 15:31:13

在函数作用域外声明的变量绑定到全局作用域。因为您在脚本标记中声明var bf = {},所以它的父对象是window对象。

这个MDN文档是JavaScript中关于变量的一个很好的读物。

票数 4
EN

Stack Overflow用户

发布于 2015-09-29 16:26:55

Rossipedia有两个很好的答案,同时也让我找到了这个问题。看看他的职位。

由于未知的原因,jQuery版本1.11.1 (我使用的是v1.11.3,因此在我的文章中使用1.11.1\3)有某种错误,这在jQuery版本2.1.3中是固定的。

但我还发现,我用来为我们的站点生成菜单的程序之一是生成一个旧的函数名(showIt而不是show_menu),这也造成了问题。通过修复生成的函数名,问题已经解决了。

这并不意味着jQuery的人可以“是的!我们不需要修复任何东西!”因为这是一个有效的错误,我发布的简单代码显示了如何破坏jQuery,这可能意味着有一些方法可以导致jQuery的实际问题。因此,基本上,这应该由更符合jQuery的人来研究,以找出为什么我发布的代码会做它所做的事情。然后他们可以回来说:“你这个白痴!你干了蠢事!你不该这么做!”或者“感谢你找出了这个世界上没有人遇到或关心的真正晦涩的问题。”无论如何,这是一个已知的问题。:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32847945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档