我创建了一个新的全局对象,然后将所有内容放到该新对象中,这样它就不会干扰其他任何人所做的任何事情。调用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()截屏:
没有document.ready()的屏幕截图:
更好?
最佳答案
在脚本标签的顶级范围中,所有变量都隐式地附加到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/