JavaScript中函数对象与函数有什么区别?
如图一代码如果//注册提示信息我写成①document.getElementById("password").onblur=checkPassword;则页面如图二显示,...
如图一代码
如果//注册提示信息我写成
①document.getElementById("password").onblur = checkPassword;则页面如图二显示,必须要点击一下密码输入框再点击其他地方,密码格式的提示才会显示。
而如果//注册提示信息我写
②document.getElementById("password").onblur = checkPassword();
则页面如图三显示,一刷新页面密码格式的提示就显示出来了,还没点击就已经触发了onblur事件。
求教:①和②这两行代码有什么区别?加()与不加()区别是什么?这两行代码分别是怎么运行的? 展开
如果//注册提示信息我写成
①document.getElementById("password").onblur = checkPassword;则页面如图二显示,必须要点击一下密码输入框再点击其他地方,密码格式的提示才会显示。
而如果//注册提示信息我写
②document.getElementById("password").onblur = checkPassword();
则页面如图三显示,一刷新页面密码格式的提示就显示出来了,还没点击就已经触发了onblur事件。
求教:①和②这两行代码有什么区别?加()与不加()区别是什么?这两行代码分别是怎么运行的? 展开
5个回答
展开全部
1:onblur 的值是一个监听函数,函数 函数 重要的事说三遍,当文本框失去焦点时会触发这个函数的调用
2.对于②行 :由于js代码是从上而下的执行 到达这一行 你来一个checkPassword() 这是一个函数的调用 也就是 页面一刷新 就会立即执行这个函数 因为加了"()" 所以就会出现立即验证的效果,函数执行完成 会有一个返回值(return 的值 ,如果函数体内不显式的返回 默认就返回 undefined) 这个时候 你② 的代码 就相当于
var checkRusult = checkPassword();
根据题主截图 返回的是一个布尔值
document.getElementById("password").onblur =checkRusult //true or false
导致的效果就是 页面刷新立马进行验证,然后你之后再失去焦点什么的 不会有任何效果
2.对于②行 :由于js代码是从上而下的执行 到达这一行 你来一个checkPassword() 这是一个函数的调用 也就是 页面一刷新 就会立即执行这个函数 因为加了"()" 所以就会出现立即验证的效果,函数执行完成 会有一个返回值(return 的值 ,如果函数体内不显式的返回 默认就返回 undefined) 这个时候 你② 的代码 就相当于
var checkRusult = checkPassword();
根据题主截图 返回的是一个布尔值
document.getElementById("password").onblur =checkRusult //true or false
导致的效果就是 页面刷新立马进行验证,然后你之后再失去焦点什么的 不会有任何效果
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
题目与问题内容,有一些差异。
document.getElementById("password").onblur = checkPassword;
上面的这句话的意思是,给password这个元素的onblur事件,添加一个函数,鼠标在离开元素时就会调用执行checkPassword函数。一般来说,验证密码规则函数的调用,都是用这种方法,就是说用户在输入完密码之后,才会去校验密码格式是否有问题。而你后面的写法:
document.getElementById("password").onblur = checkPassword()
这句话是说,给元素的onblur事件添加一个函数,如果你的checkPasswrod返回的是一个函数对象,则会添加成功,否则只会先运行一遍checkPassword函数,给你的password元素的值进行一遍校验,因为此时password值为空,所以校验结果是不符合,就会在passwrod后面出现提示,但是鼠标移入password再移出,并不会触发校验函数,并不符合实际的校验场景。
综上,在代码中出现函数体时,一般用法就是给某个事件绑定某个函数,比如你的第一种写法,只有在真正触发的这个事件时,函数才会运行;在代码中出现函数体后面加(),就是要运行该函数,至于函数运行之后会发生什么,情况就太复杂了。
document.getElementById("password").onblur = checkPassword;
上面的这句话的意思是,给password这个元素的onblur事件,添加一个函数,鼠标在离开元素时就会调用执行checkPassword函数。一般来说,验证密码规则函数的调用,都是用这种方法,就是说用户在输入完密码之后,才会去校验密码格式是否有问题。而你后面的写法:
document.getElementById("password").onblur = checkPassword()
这句话是说,给元素的onblur事件添加一个函数,如果你的checkPasswrod返回的是一个函数对象,则会添加成功,否则只会先运行一遍checkPassword函数,给你的password元素的值进行一遍校验,因为此时password值为空,所以校验结果是不符合,就会在passwrod后面出现提示,但是鼠标移入password再移出,并不会触发校验函数,并不符合实际的校验场景。
综上,在代码中出现函数体时,一般用法就是给某个事件绑定某个函数,比如你的第一种写法,只有在真正触发的这个事件时,函数才会运行;在代码中出现函数体后面加(),就是要运行该函数,至于函数运行之后会发生什么,情况就太复杂了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
引擎会优先加载函数 变量方式声明的 会按顺序加载 。其他没区别。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
②document.getElementById("password").onblur = checkPassword();
当你的代码解析到这一行的时候不会直接执行checkPassword()函数.
①document.getElementById("password").onblur = checkPassword;
是给password绑定了失去焦点事件,在密码框失去焦点才会触发并执行checkPassword()函数.
当你的代码解析到这一行的时候不会直接执行checkPassword()函数.
①document.getElementById("password").onblur = checkPassword;
是给password绑定了失去焦点事件,在密码框失去焦点才会触发并执行checkPassword()函数.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询