dongyuanxin / blog

📚 专注Web与算法
https://0x98k.com
MIT License
1.38k stars 184 forks source link

「评论」JavaScript基础知识梳理(下) #56

Open dongyuanxin opened 5 years ago

dongyuanxin commented 5 years ago

JavaScript基础知识梳理(下):https://xin-tan.com/passages/2019-03-27-javascript-second/

SecondHandCode commented 5 years ago

原型 题目:如何 JS 中的原型? 缺少了 '理解' 二字

dongyuanxin commented 5 years ago

@SecondHandCode 原型 题目:如何 JS 中的原型? 缺少了 '理解' 二字

已修改

dadawanan commented 5 years ago

执行上下文那好像说的不是很对

dongyuanxin commented 5 years ago

@dadawanan 执行上下文那好像说的不是很对

哪里不对?

root-lucas commented 4 years ago
function mockData() {
 const mem = {name:"lucas",age:22};

  return {
    clear: ()=>{mem = null}, // 显式暴露清理接口

    get: page => {
      if (page in mem) {
        return mem[page];
      }
      mem[page] = Math.random();
    }
  };
}

console.log(mockData().get('name')); //lucas
mockData().clear();
console.log(mockData().get('name')); //lucas

执行到mockData().clear();直接报错Assignment to constant variable,即便换了let var赋值对象还是可以读取对象(依旧没有清除)

dongyuanxin commented 4 years ago

@root-lucas

function mockData() {
 const mem = {name:"lucas",age:22};

  return {
    clear: ()=>{mem = null}, // 显式暴露清理接口

    get: page => {
      if (page in mem) {
        return mem[page];
      }
      mem[page] = Math.random();
    }
  };
}

console.log(mockData().get('name')); //lucas
mockData().clear();
console.log(mockData().get('name')); //lucas

执行到mockData().clear();直接报错Assignment to constant variable,即便换了let var赋值对象还是可以读取对象(依旧没有清除)

没问题呀,const声明是地址不变的常量,重新赋值的操作会抛出 Assignment to constant variable

root-lucas commented 4 years ago

@dongyuanxin

@root-lucas

function mockData() {
 const mem = {name:"lucas",age:22};

  return {
    clear: ()=>{mem = null}, // 显式暴露清理接口

    get: page => {
      if (page in mem) {
        return mem[page];
      }
      mem[page] = Math.random();
    }
  };
}

console.log(mockData().get('name')); //lucas
mockData().clear();
console.log(mockData().get('name')); //lucas

执行到mockData().clear();直接报错Assignment to constant variable,即便换了let var赋值对象还是可以读取对象(依旧没有清除)

没问题呀,const声明是地址不变的常量,重新赋值的操作会抛出 Assignment to constant variable

@dongyuanxin

@root-lucas

function mockData() {
 const mem = {name:"lucas",age:22};

  return {
    clear: ()=>{mem = null}, // 显式暴露清理接口

    get: page => {
      if (page in mem) {
        return mem[page];
      }
      mem[page] = Math.random();
    }
  };
}

console.log(mockData().get('name')); //lucas
mockData().clear();
console.log(mockData().get('name')); //lucas

执行到mockData().clear();直接报错Assignment to constant variable,即便换了let var赋值对象还是可以读取对象(依旧没有清除)

没问题呀,const声明是地址不变的常量,重新赋值的操作会抛出 Assignment to constant variable

root-lucas commented 4 years ago

清理闭包方法

function mockData() {
  const mem = {name:"lucas",age:22};

  return {
    clear: () => {
        for(let i in mem){
            delete mem[i];
        }
    }, // 显式暴露清理接口
    get: (page) => {
      if (page in mem) {
        return mem[page];
      }
      mem[page] = Math.random();
    }
  };
}

var result = mockData();

console.log(result.get('name')); //lucas
result.clear(); //清理常量对象
console.log(result.get('name')); //undefined
root-lucas commented 4 years ago

我觉得你这博客的模板不错,想知道在哪下载的?

dongyuanxin commented 4 years ago

@root-lucas 我觉得你这博客的模板不错,想知道在哪下载的?

vuepress官方模版,自行修改和定制插件即可