我的Chrome瀏覽器最近已經更新到61.0.3163.79版本,我注意到一個奇怪的行爲與下面的JavaScript代碼:衝突的JavaScript變量名61.0.3163.79
<!doctype html>
<html lang="fr">
<head>
<script>
var scroll = {
myFunction : function() {console.log('myFunction called');}
}
scroll.myFunction(); /* first call */
window.scroll.myFunction(); /* second call */
</script>
</head>
<body>
<button onclick="scroll.myFunction()">test1</button> <!-- third call -->
<button onclick="window.scroll.myFunction()">test2</button> <!-- fourth call -->
</body>
</html>
這代碼覆蓋window.scroll
函數(不要問我爲什麼,這是遺留代碼)。在控制檯結果是運行時和「測試1」和「測試2」按鈕被點擊時,以下幾點:
myFunction called
myFunction called
Uncaught TypeError: scroll.myFunction is not a function at HTMLButtonElement.onclick
myFunction called
在早期的Chrome版本,並在MSIE 11,點擊「測試1時,函數調用工作正常「和‘TEST2’按鈕,導致在控制檯以下消息:
myFunction called
myFunction called
myFunction called
myFunction called
現在的問題:
- 爲什麼瀏覽器的Chrome從早期.0.3163.79行爲不同版本和其他瀏覽器?
- 這是一個錯誤?
- 將這種行爲被未來的版本和其他瀏覽器被採用?
請注意,在此期間,我更改了變量名稱以避免與瀏覽器本機特性的名稱衝突。
這是不使用全局變量的一個很好的例子.. :) ..它看起來像按鈕具有滾動性質,也許最近增加。因此,this.scroll = TheButton.scroll ..將您的代碼更改爲window.scroll.myFunction,它會再次工作。 – Keith
@Keith:我編輯了代碼以反映建議的變體。請將您的評論推薦給答案。 –