码迷,mamicode.com
首页 > 编程语言 > 详细

Vue之JavaScript基础

时间:2019-11-06 09:14:23      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:使用   obj   script   div   getname   outer   java   变量   一个   

闭包

  定义:能够访问另一个函数作用域的变量的函数。

  实例:

function outer() {
     var  a = ‘变量1‘
     var  inner = function () {
            console.info(a)
     }
    return inner    // inner 就是一个闭包函数,因为他能够访问到outer函数的作用域
}
var  inner = outer()   // 获得inner闭包函数
inner()   //"变量1"

 

   容易产生的问题:

    1. 引用的var定义变量可能发生变化,es6中使用let将不会有此问题

    2. this的指向问题

var object = {
     name: ‘‘object",
     getName: function() {
        return function() {
             console.info(this.name)
        }
    }
}
object.getName()()    // underfined
// 因为里面的闭包函数是在window作用域下执行的,也就是说,this指向windows

 

    3. 内存泄漏问题

function  showId() {
    var el = document.getElementById("app")
    el.onclick = function(){
      aler(el.id)   // 这样会导致闭包引用外层的el,当执行完showId后,el无法释放
    }
}

// 改成下面
function  showId() {
    var el = document.getElementById("app")
    var id  = el.id
    el.onclick = function(){
      aler(id)   // 这样会导致闭包引用外层的el,当执行完showId后,el无法释放
    }
    el = null    // 主动释放el
}

 

原型链

 

Vue之JavaScript基础

标签:使用   obj   script   div   getname   outer   java   变量   一个   

原文地址:https://www.cnblogs.com/jingxuan-li/p/11802863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!