关于工厂函数中this作用及return语句影响的技术疑问
工厂函数中this与return的作用解析
哈哈完全不用抱歉,基础问题搞明白才是扎实进阶的关键!我来给你掰扯清楚这两个点~
一、为什么去掉this代码还能正常运行?
你现在的rgb函数里直接用r、g、b能拿到值,核心是闭包特性在起作用:
rgb是嵌套在makeColor里的内部函数,它可以访问外层makeColor函数的参数(也就是r、g、b),哪怕外层函数执行完毕,它也能“记住”这些值。- 而原来注释掉的
const { r, g, b } = this;,这里的this指向的是调用rgb方法的对象(也就是你创建的newColor),因为newColor本身就挂载了r、g、b属性,所以用this也能拿到对应的值。
两种方式都能获取到正确的颜色值,所以你去掉this代码依然能运行。不过这里有个细微区别:
如果后续修改了
newColor的属性(比如newColor.r = 200),用闭包方式的rgb会返回最初的50,而用this的方式会返回更新后的200——因为前者是读取闭包缓存的旧值,后者是实时读取对象上的属性。
二、为什么移除return color;会导致color.rgb()无法工作?
makeColor是典型的工厂函数,它的核心逻辑就是:
- 创建一个包含颜色属性和方法的
color对象 - 把这个对象返回给外部,让外部变量(比如
newColor)能拿到它
如果去掉return color;,JavaScript函数在没有显式返回值的情况下,会默认返回undefined。这时候const newColor = makeColor(50, 100, 150)这行代码里,newColor就变成了undefined,你再调用newColor.rgb(),自然会报错“无法读取undefined的rgb属性”,也就没法正常工作了。
内容的提问来源于stack exchange,提问作者Bnny
相关产品推荐
相关产品推荐

