请双越老师看下边代码,为什么我下边写的这种形式就返回undefined呀?

来源:6-6 作用域相关的面试题 - part2

JavaScript__yxq

2021-04-06

    function createCache() {
        let data = {};
        return {
            get: function (key) {
                return data[key];
            },
            set: function (key, value) {
                data[key] = value;

            }
        }
    }
    // const c = createCache();
    // c.set('a', 100);
    // console.log(c.get('a'));

	//偶然发现的,为什么我下边写的这种形式就返回undefined呀?有啥不同吗?
    createCache().set('a', 100);
    console.log(createCache().get('a'));//undefined
</script>
写回答

3回答

双越

2021-04-07

你的代码是这样的。

createCache().set('a', 100);
console.log(createCache().get('a'));//undefined

我给你翻译一下:

const c1 = createCache()
c1.set('a', 100);
const c2 = createCache()
console.log(c2.get('a'));//undefined

经过我的翻译,你能明白你的问题了吧?

0
2
Kywane
老师您的意思是不是按着楼主的写法,createCache相当于被执行了两次,data也被重新进行赋值了,但这就不是用闭包去封装的本意了对吧
2022-03-16
共2条回复

薛清扬

2022-03-14

creatCache返回了两个不同的对象

0
0

双越

2021-04-07

set 和 get 时分别执行了两次 createCache() ,这两次的返回值,不是同一个东西。

0
2
双越
回复
JavaScript__yxq
我重新回复你。
2021-04-07
共2条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程