首页 > 解决方案 > 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.readcheckReading

这是否起作用的原因是函数声明,即使直接作为属性完成(如上),也被提升到其范围的顶部?

那么在 JS 引擎完成了它的事件循环的第一次滴答之后,checkReading.read实际上是被提升(移动)到了checkReading函数的顶部吗?

PS:我知道普通函数声明被提升function foo() {..}到其范围的顶部,但不确定这是否也适用于上述属性。

标签: javascript

解决方案


我正在努力的部分是如何在函数对象上声明属性if(checkReading.read)之前调用它。checkReading.readcheckReading

这与功能或吊装无关。您可以访问任何对象上不存在的属性:

var foo = {};
console.log(foo.bar);

如果该属性不存在,则其返回值为undefined,强制为false.

我实际上想过这个虚假的概念,但是永远无法达到下面的代码。还是我错过了什么?

如果条件为false,则不执行语句体if即不执行,因此执行函数的其余部分。return;


推荐阅读