我在 Chrome (88.0.4324.96) 上觀察到 jQuery 3.0 之前版本的競爭條件。 我在 Safari 和 Firefox 上都看不到這個。
<body>
<script defer src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script defer src="test.js"></script>
</body>
測試.js:
jQuery(document).ready(function ($) {
console.log('jQuery version', $().jquery);
console.log(a);
});
const a = 'OK';
根據我的經驗,大約 10% 的時間在Cannot access 'a' before initialization
這會因Cannot access 'a' before initialization
失敗。
一旦我升級到 jQuery 3,我就無法重現。 由於這是一個競爭條件,我不能 100% 確定,但對我來說似乎很確定。