gpt4 book ai didi

javascript - jQuery - 函数移至 window.function

转载 作者:行者123 更新时间:2023-12-01 02:10:19 25 4
gpt4 key购买 nike

我创建一个新的全局对象,然后将所有内容放入该新对象中,这样它就不会干扰其他人所做的任何事情。调用 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 数组的所有内容,但我从未要求发生这种情况。

直到上周五(2015 年 9 月 25 日)这还没有发生。现在确实如此。

更新:我刚刚尝试删除 document.ready() 函数。如果删除 document.ready() 部分 - 那么全局 bf 对象将恢复为全局变量。所以这似乎与 jQuery 本身有关。

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

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

enter image description here

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

enter image description here

更好吗?

最佳答案

在脚本标记的顶级范围中,所有变量都隐式附加到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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com