JavaScript函数没有调用,自动运行bug问题

为什么这段函数没有调用但却自动执行了?麻烦各位解答下,谢谢


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //1.弹出用户名和密码框
      //2.拿着用户输入的用户信息取已注册的数组进行查找
      //3.找到即登录成功,没找到即登录失败

      //1.已注册用户信息和现有用户信息
      let loginList = [
        { userName: 'admin', password: 'admin321' },
        { userName: 'zhangsan', password: 'zs321' },
        { userName: 'lisi', password: 'ls321' },
        { userName: 'yyqx', password: 'yyqx321' },
      ]
      let userInfo = {
        token1: {
          city: '杭州',
          money: '1000w',
          sex: '女',
          userName: 'admin',
          password: 'admin321',
        },
        token2: {
          city: '北京',
          money: '1100w',
          sex: '女',
          userName: 'zhangsan',
          password: 'zs321',
        },
        token3: {
          city: '北京',
          money: '800w',
          sex: '男',
          userName: 'lisi',
          password: 'ls321',
        },
        token4: {
          city: '天津',
          money: '600w',
          sex: '男',
          userName: 'yyqx',
          password: 'yyqx321',
        },
      }
      //功能函数一、 查找函数
      // userFind()
      function userFind() {
        let isFind = false
        const uname = prompt('请输入登录用户名')
        const password = prompt('请输入登录密码')
        for (let i = 0; i < loginList.length; i++) {
          if (loginList[i].userName === uname && loginList[i].password === password) {
            isFind = true
            alert('登录成功')
            const token = `token${Math.floor(Math.random() * 4 + 1)}`
            alert(`
          地址:${userInfo[token].city}
          存款:${userInfo[token].money}
          性别:${userInfo[token].sex}
          姓名:${uname}
          密码:${password}
          `)
            break
          }
        }
        //利用返回值的值来为外界函数调用
        return { isFind: isFind, uname: uname, password: password }
      }

      if (!userFind().isFind) {
        alert('登录失败')
      }
    </script>
  </body>
</html>

JS会执行函数定义外的执行语句。

直接调用就可以了 var rtn=userFind();或者引入jQuery,采用$(function(){ var rtn=userFind() });

你要什么时候执行函数,就把这段给包起来,放到触发事件里面,下面这个是点击页面触发。

document.addEventListener('click',e=>{
if (!userFind().isFind) {
        alert('登录失败')
}
});

【以下回答由 GPT 生成】

这段代码中的函数确实没有被自动执行。问题的原因可能是以下几点:

  1. 浏览器缓存:可能之前已经运行过该代码,并保存在浏览器缓存中。你可以尝试清除浏览器缓存或者在其他浏览器中打开该页面来确认。

  2. DOM 被加载完成触发事件:这段代码使用了 addEventListener 方法,该方法是在 DOM 元素加载完成后才会绑定事件。所以当你点击登录按钮时,checkLogin 函数才会被调用。

  3. 错误的调用方式:在网页中直接放置的 JavaScript 代码会在浏览器解析到代码时立即执行。这意味着代码中定义的函数和事件绑定会在代码解析过程中立即执行,但是如果没有触发相应的事件,函数内的代码逻辑不会执行。

以上是可能导致函数自动执行的一些原因,但是在给出进一步解决方案之前,我们需要先确认问题的具体表现。你能提供更多关于函数自动执行的细节吗?例如,是否在页面加载完成后就立即执行了 checkLogin 函数?



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^