关于initValidation.validate含义、initValidation()调用原因及initValidation.validate存储位置的技术问询
关于
initValidation.validate的问题解答 咱们先结合你提供的代码示例来拆解问题,这样更直观:
function initValidation() { // irrelevant code here function validate(_block){ console.log( "test", _block ); } initValidation.validate = validate; } initValidation(); initValidation.validate( "hello" );
1. initValidation.validate 是什么意思?
在JavaScript里,函数本身也是一种对象——这意味着我们可以像给普通对象加属性一样,给函数添加属性和方法。
在initValidation这个函数内部,先定义了一个名叫validate的内部函数,接着通过initValidation.validate = validate;这行代码,把这个内部函数赋值给了initValidation函数对象的validate属性。
所以initValidation.validate本质上是一个挂载在initValidation函数对象上的方法,调用它就会执行内部那个validate函数的逻辑(比如打印你传入的参数)。
2. 为什么要调用initValidation()?initValidation.validate存储在什么位置?
为什么要调用initValidation()?
因为initValidation.validate这个属性是在initValidation函数内部完成赋值的。如果不调用initValidation(),函数内部的代码根本不会运行:
- 内部的
validate函数不会被定义 initValidation.validate = validate;这行赋值代码也不会执行
换句话说,只有执行了initValidation(),initValidation函数对象上才会出现validate这个属性,之后我们才能正常调用initValidation.validate("hello");如果跳过这一步直接调用,会抛出“属性不存在”的错误。
initValidation.validate存储在什么位置?
它作为**initValidation函数对象的自有属性**存在。你可以把initValidation看成一个特殊的对象(既能执行函数逻辑,又能存储属性),validate就是这个对象属性列表里的一员,属性值就是我们定义的那个内部函数。
内容的提问来源于stack exchange,提问作者sina
相关产品推荐
相关产品推荐

