jQuery如何获取click回调函数内循环赋值的变量到外部
问题解答
可以提取到外部使用,但你当前的代码存在3个致命问题会导致取值失败,需要先修正:
- 执行顺序错误:你先触发
window.location.href整页跳转,再执行a = entry.username赋值,跳转后当前页面JS上下文会被立刻销毁,后续的赋值、return语句根本不会执行。 - 作用域不规范:你没有在函数外部提前声明变量
a,就算赋值成功也会变成隐式全局变量,容易被其他逻辑污染,且整页跳转后所有普通变量都会被清空,根本无法跨页面传递。 - 校验逻辑bug:循环结束后的错误判断逻辑有误,当前写法只要最后一个遍历的用户账号密码不匹配就弹错,不符合「遍历所有用户都不匹配才提示错误」的预期。
分场景实现方案
场景1:在当前登录页的函数外部使用该值
提前在点击事件的外部声明变量,调整代码执行顺序(先赋值再跳转),注意点击事件是异步触发的,不要在事件绑定后立刻读取变量,要等赋值完成后再执行依赖该值的逻辑。
修正后代码:
// 函数外部提前声明变量 let loginUsername; $('#btnlogin').click(function(){ const usernamelogin = $('#usernamelogin').val() const passwordlogin = $('#passwordlogin').val() const data_user1 = JSON.parse(localStorage.getItem('data_user')) let loginPass = false; for(const i in data_user1){ const entry = data_user1[i] if(usernamelogin === entry.username && passwordlogin === entry.password){ loginPass = true; // 先完成赋值 loginUsername = entry.username; // 如果需要跨页面传值,优先存storage,不要靠普通全局变量 sessionStorage.setItem('currentUser', entry.username); // 赋值完成后再跳转 window.location.href = "curhat.jsp"; return } } // 修正错误提示逻辑:所有用户遍历完都没匹配到才提示 if(!loginPass){ alert("wrong username or password") } })
场景2:在跳转后的curhat.jsp页面使用登录用户名
不需要在当前页提全局变量,直接在跳转前把用户名存入sessionStorage,在新页面直接读取即可,这也是前端登录态暂存的通用方案:
// curhat.jsp页面内的JS代码 const currentUsername = sessionStorage.getItem('currentUser'); // 拿到值后直接做后续逻辑即可 console.log('当前登录用户:', currentUsername);
注意事项
- 整页跳转场景下不要依赖普通JS变量传值,页面卸载后内存里的所有变量都会被回收,必须用
localStorage/sessionStorage、URL查询参数这类可跨页面持久化的存储方式。 - 禁止使用不声明直接赋值的隐式全局变量,会造成全局命名空间污染,排查问题难度极高。
- 永远不要把逻辑写在页面跳转语句后面,这类代码属于不可达的死代码,没有执行机会。
内容的提问来源于stack exchange,提问作者Bagas Rizkiyanto
相关产品推荐
相关产品推荐

