为啥使用jQuery时不能通过window对象访问对象?
Posted
技术标签:
【中文标题】为啥使用jQuery时不能通过window对象访问对象?【英文标题】:Why can't I access objects through the window object when using jQuery?为什么使用jQuery时不能通过window对象访问对象? 【发布时间】:2012-09-09 23:50:28 【问题描述】:我正在尝试通过窗口对象访问一个函数。在我的代码中,我的函数被一个字符串引用,所以我必须使用窗口对象(或 eval)来获取它。我用纯 javascript 测试了我的代码,它运行良好。但是当使用 jQuery 时它失败了。这是我的测试代码:
function speak(words, callback)
for(var i=0;i<10000;i++)
console.log(words);
if(callback)
callback.call();
console.log(window['speak']);
Here is a link to the pure JavaScript version which works.Here is a link to the jQuery version which doesn't work.
我需要做什么才能在 jQuery 中进行这项工作?
【问题讨论】:
【参考方案1】:您没有将speak
声明为window
的成员,而JSFiddle 实际上将它包装在document.ready
回调中。 You'll need to explicitly set window.speak = speak
as part of your code if you want it available on the window
object.
或者,您需要将 fiddle 配置为 execute without a wrapper rather than onDomReady
【讨论】:
哦,我明白了。唔。所以任何不在document.ready
回调中的函数都会自动声明为window的成员,但如果它在document.ready
中,那么它不是吗?
@Aust,在全局作用域中声明的函数和变量被隐式添加到全局对象中,在另一个函数中声明的函数和变量只在该函数中存在。在编写 JavaScript 时,建议将所有代码都写在一个闭包中,以免意外的全局污染。以上是关于为啥使用jQuery时不能通过window对象访问对象?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能使用 jquery 访问 ajax 拉取的内容 [重复]
为啥我可以通过 Postman 发送帖子,但不能通过 JS/JQUERY CLIENT
为啥我不能使用 jQuery 从卸载事件处理程序触发 AJAX 请求?
为啥这个闭包不能访问 'this' 关键字? - jQuery