网上有大量讨论JavaScript的闭包的用法的文章,而且结合了函数作用域等JavaScript的很底层的知识。鉴于自己都没有在代码中有意识地写过闭包,这些文章看起来自然是很吃力了。而且看了N多篇也不能回答,到底怎样的一段代码才叫做闭包,这个问题。
但很多文章也同样提到了,JavaScript的闭包可以实现对象、类的私有属性和方法。于是今天试着写了一下下面的代码,感觉豁然开朗。这样一来,自己对于闭包到底是什么依然不是很清晰,但是至少可以实现一些之前自己实现不了的东西了。
以下是代码:
var People = function (){
// private function should work within closure
init();
function init(){
console.log("created");
}
var name = "default";
function setName(n){
name = n;
};
function getName(){
return name;
}
return {getName, setName};
}
var p = People();
p.setName("lqt");
console.log(p.getName());
/* return
created
lqt
*/
```