我们在JavaScript中关闭和原型之间的区别是什么?

时间:2019-02-19 12:17:38

标签: javascript

我正在检查JavaScript中的闭包和原型。我编写了两个基本HTML返回函数,基本上它们都返回相同的输出。这两者之间有什么区别/关系,为什么我们应该使用闭包?

//Closure
function createLI(tags) {
  return function(...args) {
    if (args.length > 1) {
      return args.map((iteam) => {
        return "<" + tags + ">" + iteam + "</" + tags + ">"
      })
    } else {
      return "<" + tags + ">" + args + "</" + tags + ">"
    }
  }
}

var tag = createLI('li');
console.log(tag('test'));



//prototype function

let Newfunction = function(x) {
  this.content = x;
}

Newfunction.prototype.aswrapper = function(...args) {
  if (args.length > 1) {
    return args.map((iteam) => {
      return "<" + this.content + ">" + iteam + "</" + this.content + ">"
    })
  } else {
    return "<" + this.content + ">" + args + "</" + this.content + ">"
  }
}

let heading = new Newfunction('h1');
heading.aswrapper('sometextprint');
console.log(heading.aswrapper('sometextprint'));

1 个答案:

答案 0 :(得分:2)

每次使用闭包创建对象时,都会有其方法的副本(即使它们执行相同的操作,它们也会作为Function类型的独立对象存在于内存中)。如果使用原型方法,则无论您创建多少个对象,每种方法(原型之一)都将只有一个副本。