You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:函数对象属性未赋值可访问?是否存在提升?

为什么这段代码中未赋值的函数属性能被正常判断?

先直接给你结论:JavaScript里根本没有对象属性的提升机制,你误解了这段代码的运行逻辑~

我们来一步步拆解这段代码的执行过程:

  1. 第一次调用checkReading()时:
    这时候checkReading.read这个属性还完全没被创建过,当你访问一个对象不存在的属性时,JS会返回undefined。而在if判断里,undefined属于「假值」,所以if(checkReading.read)的条件不成立,代码会跳过return,继续往下执行。

  2. 接下来代码才会执行checkReading.read = this.scrollHeight - this.scrollTop === this.clientHeight;:
    这一步才正式给checkReading这个函数对象添加了read属性,赋值结果是一个布尔值——用来判断调用该函数的元素是否已经滚动到底部。

  3. 之后的逻辑就顺理成章了:
    根据checkReading.read的状态,禁用/启用对应的按钮,同时更新提示文本的内容。

  4. 第二次及之后调用函数时:
    checkReading.read已经存在了,如果它的值是true(用户已经滚到底部),if条件就会成立,函数直接return,避免重复执行后续的状态更新逻辑。

再补充澄清你提到的「提升」:只有函数声明(比如function foo() {})和用var声明的变量才有提升行为,对象的属性(哪怕是函数对象的属性)是不存在提升的。你第一次访问checkReading.read时,只是拿到了undefined而已,并不是属性被提升到了函数顶部。

内容的提问来源于stack exchange,提问作者Magnus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:28