我的许多脚本看起来是这样的:
if (...) {
const myvariable1 = document.querySelector('.class-1');
const myvariable2 = document.querySelector('.class-2');
function someFunction() {
// Do something with myvariable1 or myvariable2
}
someFunction();
}
它们在Chrome、Firefox、Edge和Opera上运行良好,但在Safari上我得到了错误:
ReferenceError: Can't find variable myvariable1
解决方案
如果我在If语句之前声明常量,代码就会工作。。。
const myvariable1 = document.querySelector('.class-1');
const myvariable2 = document.querySelector('.class-2');
if (...) {
function someFunction() {
// Do something with myvariable1 or myvariable2
}
someFunction();
}
但我不明白为什么,也不知道如何在全球范围内提供常量。
也许有人可以向我解释Safari独有的行为。
这种奇怪的行为在非严格代码MSN中的块级函数中有解释。
启用严格模式将解决此问题。
jquery中已经启用了严格模式,在Safari中对它进行处理并没有解决问题。
使用var function_name = function_name() {}
有时有效,但重新加载时会返回错误。
对我来说,唯一解决的是删除";异步;从我的函数js文件的加载。
是
<script async src="js/header-functions.js"></script>
然后这就解决了
<script src="js/header-functions.js"></script>
对我来说,它解决了确保在页面的所有DOM元素都准备好使用后调用函数的问题。
我将脚本包装在:中
$(function () {
//do
});