2012-09-17 58 views
1

我试图通过窗口对象访问一个函数。在我的代码中,函数被字符串引用,所以我必须使用窗口对象(或eval)来获取它。我用纯JavaScript测试了我的代码,并且它完美地工作。但是,当使用jQuery它失败。这里是我的测试代码:为什么在使用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的这项工作?

回答

4

你没有申报speakwindow成员,实际上的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

另外,你需要配置你的小提琴execute without a wrapper rather than onDomReady

+0

哦,我明白了。嗯。因此,不在'document.ready'回调中的任何函数都会自动声明为window的成员,但是如果它位于'document.ready'中,那么它不是? – Aust

+0

@如果在全局范围内声明的函数和变量隐式添加到全局对象中,则在另一个函数内声明的函数和变量仅在函数内保留。在编写JavaScript时,建议在关闭中编写所有代码,以避免意外的全球污染。 – zzzzBov