javascript - JavaScript:属性函数是否被提升?
问题描述
我试图理解为什么以下代码有效:
function checkReading () {
if (checkReading.read) {
return;
}
checkReading.read = this.scrollHeight - this.scrollTop === this.clientHeight;
document.registration.accept.disabled = document.getElementById("nextstep").disabled = !checkReading.read;
checkReading.noticeBox.innerHTML = checkReading.read ? "Thank you." : "Please, scroll and read the following text.";
}
来源:https ://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight
我正在努力的部分是如何在函数对象上声明属性if(checkReading.read)
之前调用它。checkReading.read
checkReading
这是否起作用的原因是函数声明,即使直接作为属性完成(如上),也被提升到其范围的顶部?
那么在 JS 引擎完成了它的事件循环的第一次滴答之后,checkReading.read
实际上是被提升(移动)到了checkReading
函数的顶部吗?
PS:我知道普通函数声明被提升function foo() {..}
到其范围的顶部,但不确定这是否也适用于上述属性。
解决方案
我正在努力的部分是如何在函数对象上声明属性
if(checkReading.read)
之前调用它。checkReading.read
checkReading
这与功能或吊装无关。您可以访问任何对象上不存在的属性:
var foo = {};
console.log(foo.bar);
如果该属性不存在,则其返回值为undefined
,强制为false
.
我实际上想过这个虚假的概念,但是永远无法达到下面的代码。还是我错过了什么?
如果条件为false
,则不执行语句体,if
即不执行,因此执行函数的其余部分。return;
推荐阅读
- varnish - 如何合并这两个清漆后端?
- java - 创建具有多个标记的折线
- python - 检查内部函数是否由相同的函数创建
- excel - Excel 因 afterupdate 宏的错误而崩溃
- css - 检查装载机的位置
- python - 以扭曲的方式并行运行长阻塞计算
- android - cursor 第一次为空,recyclerView 不显示游标数据
- windows - 在哪里存储存储在 Windows 10 上的 GitLab/git 凭据?
- tensorflow - 如何在 TensorFlow 对象检测 API 中添加自定义评估指标?
- google-app-engine - 从 App Engine Flex 迁移到 App Engine Standard 第二代