变量对象/闭包/this

//后台每个执行环境都有一个表示变量的对象—变量对象

//例如compare()函数调用

//compare的执行环境而言,其作用域链包含两个变量对象
本地活动对象
全局活动对象
全局变量对象始终存在,compare()函数只在函数执行过程中存在
作用域链:一个指向变量对象的指针列表,只引用

定义:闭包有权访问另一个函数作用域中的变量的函数

//内部定义。然后返回
test = {
    a:"test",
    set:function () {
        var a = "set"
        function f() {
            var a = "f"
        }
        return f
    }
}


直接返回一个函数
test = {
    a:"test",
    set:function () {
        var a = "set"
        return  f() {
            var a = "f"
        }
    }
}

此处一般返回匿名函数

闭包有两种写法 没有区别(暂定没有区别)
**

闭包两个问题

**
内存泄漏:由于作用域链的存在,匿名函数执行完,其包含函数的活动对象不会立即销毁 解决方案:解除引用
闭包只能取得函数中任何变量的最后一个值

this对象

两种情况永远指向window 匿名函数 定时器中的this(正常写法)

function() {}  // 此处就是匿名函数
settimeout(() => {})  // 此处定时器中的

this对象是在运行时基于函数的执行环境绑定的

function myFn(qq){     
    name = qq
  console.log(this.name);     
};
myFn('小明'); 
// 正常函数中this 就是待指当前函数

全局中,this等于window
当被作为某个对象的方法调用时,this等于那个对象

每个函数在被调用的时候自动取得两个特殊变量,this和arguments(若调用者内部没有this.变量的值,则返回undefined)。内部函数搜索这两个变量时,只会搜索到其活动对象为止。因此永远不会访问外部函数中这两个变量。不过可以把外部的this对象保存在一个闭包能访问的变量中 that = this

特殊1 //函数作为函数调用和函数作为方法调用是有区别的 //匿名函数的执行环境具有全局性

var a = "windows"

test = {
    a:"test",
    set:function () {
        var a = "set"
        function f() {
            var a = "f"
            console.log(this,this.a)
        }
        return f
    }
}

test.set()() //windows  指向全局

特殊2:箭头函数中的this指向定义函数时候所处的对象
//由于箭头函数没有this指向,所以不能用call apply bind

//箭头函数是继承而来

//所以只会从自己的作用域链一层一层向上找

var a = "windows"

test = {
    a:"test",
    set:() => {
        var a = "set"
        var f = () => {
            var a = "f"
            console.log(this,this.a)
        }
        return f
    }
}

test.set()()  //windows

一层一层往上找

var a = "windows"

test = {
    a:"test",
    set:function () {
        var a = "set"
        var f = () => {
            var a = "f"
            console.log(this,this.a)
        }
        return f
    }
}

test.set()()  //test
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值