为啥使用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

为啥jQuery不能监听document.body的滚动事件呢?

为啥WINDOWS在运行里输入IP地址不能访问网络位置的解决办法