2012-09-17 115 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