JS篇 ------ 作用域和闭包

第三部分 作用域和闭包

对应知识点

1、执行上下文

变量提升

(1)JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
(2)JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
(3)声明提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

	console.log(a) // undefined
    var a = 10;

    fn('zhansan') // 'zhansan'  20
     function fn(name) {
   
         age = 20;
         console.log(name, age)
         var age
      }

**范围:**一段 script 或者一个函数
全局: (全局上下文) 变量声明定义、函数声明
函数: (函数上下文) 变量声明定义、函数声明、this、arguments(函数参数集合)
注意:“函数声明” 和 “函数表达式” 的区别

2、this

(1)this 要在执行时才能确认值,定义时无法确认值
 var a = {
   
            name: 'A',
            fn: function () {
   
                console.log(this.name)
            }
        }

        a.fn() // this 指向 a 这个对象
        a.fn.call({
    name: 'B' }) // this 指向 {name:'B'}
        var fn1 = a.fn;
        fn1()  // this 指向 window
(2)作为构造函数执行

this 指向 new 出来的对象 f

        // 作为构造函数执行
        function Foo(name, age) {
   
            // this = {}
            this.age = age
            this.name = name;
            // return this
            console.log(this, '构造函数this') // this 指向 new 出来的对象 f
        }

        var f = new Foo('zhangsan', 20)
(3)作为对象属性执行

this 指向该属性所属的对象 obj

        // 作为对象属性执行
        var obj = {
   
            name: 'lisi',
            printName: function () {
   
                console.log(this.name)
                console.log(this)  // this 指向该属性所属的对象 obj
            }
        }

        obj.printName()
(4)作为普通函数执行

this 指向 window对象

        // 作为普通函数执行
        function fn
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值