运行jQuery onpopstate脚本触发Uncaught ReferenceError报错求助
问题排查结果
报错的核心触发原因是变量访问顺序违反let的暂时性死区规则,同时代码中还存在3处会导致逻辑失效的拼写/语法错误:
- 直接触发引用错误的问题:
let声明的变量在声明语句执行前属于暂时性死区,不允许提前访问。你的代码中先执行了let slash = page.lastIndexOf("/")访问page变量,下一行才通过let page = xxx声明page,顺序完全写反,正好对应报错提示里的「初始化前无法访问page」。 - 其他隐藏错误:
window.location的路径属性为全小写的pathname,你写为驼峰格式pathName会取到undefined,导致后续路径解析失效- if判断条件中写为
page = ''是赋值操作而非相等判断,会直接把page重置为空字符串,造成分支逻辑错误,判断相等需要使用严格相等运算符=== - jQuery的
$.ajax参数格式错误,请求成功的回调函数需要绑定到success属性上,直接在参数对象中传入匿名函数不会被识别执行
修正后完整代码
window.onpopstate = function(popEvent) { let urlPath = window.location.pathname; // 先获取路径再计算斜杠位置 let slash = urlPath.lastIndexOf("/"); let page = urlPath.substr(slash + 1); let $tab; // 使用===做相等判断 if (page === '') { $tab = $("#tabs .tab:first-of-type"); page = $tab.attr("href"); } else { $tab = $("#tabs .tab[href=" + CSS.escape(page) + "]"); } $tab.addClass("current").siblings().removeClass("current"); // 补全ajax的success回调字段 $.ajax({ url: "subpages/" + page, success: function(html) { $(".append").html(html); } }); }
内容的提问来源于stack exchange,提问作者user9785578
相关产品推荐
相关产品推荐

