javaScript基础(7):(闭包)

121 阅读1分钟

打好基础,查漏补缺

基础是重中之重

闭包

当内部函数被保存到外部时就形成了闭包。闭包会导致原有作用域不释放,造成内存泄漏。

内存泄漏:我的理解是内存被占用无法释放,造成能使用内存变小,所以说是内存泄漏。

function test(){
    var arr = []
    for (var i = 0; i < 10; i++){
        arr[i] = function(){
            console.log(i)  // 在赋值时不会执行函数体内的内容
        }
    }
    return arr
}
var funcArr = test()
for (var j = 0; j < 10; j++){
   funcArr[j]()
}
最后输出910

如何输出0~9?

function test(){
    var arr = []
    for (var i = 0; i < 10; i++){
        (function(j){
            arr[j] = function(){
            console.log(j)  // 在赋值时不会执行函数体内的内容
        }
        }(i))
    }
    return arr
}


<!-- 小测验 -->

var x = 1
iffunction f (){}){
  x += typeof f
}
console.log(x)

利用闭包,实现属性私有化

    function Person(name,wife){
        var girlfriend = 'juan'
        this.name = name
        this.wife = wife
        this.divorceRemarry=function(){
            this.wife = girlfriend
        }
        this.changeGirlfriend=function(target){
            girlfriend = target
        }
         this.sayGirlfriend=function(){
            console.log(girlfriend)
        }
    }
    var person = new Person('Hua','ying')