簡體   English   中英

jQuery - 移動到window.function的函數

[英]jQuery - functions moving to window.function

我創建了一個新的全局對象,然后將所有內容放入該新對象中,這樣它就不會干擾其他任何人做的事情。 在調用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> 

所以我結束了兩個“男朋友”。 一個是原始全局對象,第二個是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()進行屏幕截圖:

在此輸入圖像描述

沒有document.ready()的屏幕截圖:

在此輸入圖像描述

更好?

在腳本標記的頂級范圍內,所有變量都隱式附加到window

好消息是,你實際上沒有兩個bf對象,你只有兩種方法可以訪問它。

 var bf = {}; bf.foo = "bar"; document.getElementById('output').innerHTML = JSON.stringify(window.bf, undefined, 4); 
 <div id="output"></div> 

在函數范圍之外聲明的變量綁定到全局范圍。 由於您在腳本標記內聲明了var bf = {} ,因此其父對象是window對象。

這個MDN文檔很好地讀取了JavaScript中的變量。

Rossipedia有兩個很好的答案,並引導我找到問題。 看他的帖子。

由於未知原因,jQuery版本1.11.1(我使用v1.11.3,因此我的帖子中的1.11.1 | 3)有一些在jQuery版本2.1.3中修復的錯誤。

但我也發現我用來為我們網站生成菜單的程序之一是生成一個舊的函數名稱(showIt而不是show_menu),這也引起了問題。 通過修復生成的函數名稱,問題就消失了。

這並不意味着jQuery人員可以去“是的!我們不必修復任何東西!” 因為這是一個有效的錯誤,我發布的簡單代碼顯示了如何破解jQuery,這可能意味着有一些方法可以導致jQuery的實際問題。 所以基本上,這應該由更多與jQuery協調的人來查看,以找出我發布的代碼為什么會這樣做。 然后他們可以回來說“你這個白痴!你做了BLAH!你不應該!” 或者“感謝您找到這個真正模糊不清的問題,這個問題在全世界都沒有人遇到或關注過。” 無論如何 - 這是一個已知的問題。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM