丁小铭。 2019-09-02 16:16 采纳率: 50%
浏览 369
已采纳

JavaScript中函数对象与函数有什么区别?

//校验密码
function checkPassword() {
    var password = document.getElementById("password").value;
    var reg = /^\w{6,12}$/;
    var span = document.getElementById("s_password");
    if (reg.test(password)) {
        span.innerHTML = "<img width = '25%' src = 'img/gou.png'>";
    } else {
        span.innerHTML = "密码格式错误";
    }
    return reg.test(password);
 }

//注册信息提示(以下代码运行时只保留一行并去掉前面的序号)
①document.getElementById("password").onblur = checkPassword;
②document.getElementById("password").onblur = checkPassword;

如以上代码
如果//注册提示信息我写成

①document.getElementById("password").onblur = checkPassword;

则页面如下图显示,必须要点击一下密码输入框再点击其他地方,才会触发onblur事件,密码格式的提示才会显示。
图一

而如果//注册提示信息我写成

②document.getElementById("password").onblur = checkPassword();

则页面如下图显示,一刷新页面密码格式的提示就显示出来了,还没点击就已经触发了onblur事件。
图二

求教:①和②这两行代码有什么区别?加()与不加()区别是什么?这两行代码分别是怎么运行的?

  • 写回答

3条回答 默认 最新

  • 天际的海浪 2019-09-02 17:03
    关注

    JS中的函数是一种叫做Function引用类型的实例,因此函数是一个对象。函数名则是指向这个对象的引用地址。
    做为一个对象,函数是可以赋值传递的。
    dom元素的事件所需要的是函数对象的引用地址。

    函数名后面不加圆括号()就是获取函数对象的引用地址,(这样不调用执行函数)。
    如:document.getElementById("password").onblur = checkPassword; 表示把函数checkPassword这个对象的引用地址赋值给password元素的onblur事件。

    函数名后面的圆括号()实际上是调用(执行)函数的运算符。
    如果函数名后面加上圆括号就表示立即调用(执行)这个函数里面的代码。
    如:document.getElementById("password").onblur = checkPassword(); 表示立即调用(执行)checkPassword函数,并将函数执行后的return返回值(没有return会返回undefined)赋值给password元素的onblur事件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵