js中的this及箭头函数

 this调用的几种类型:

 1.普通调用(函数名())===指向window

funtion fn(){
        function fn(){
        console.log('我是fn函数:',this);
        function a(){
            console.log('我是a函数:',this);
        }
        a()
    }
    // 进行调用
    fn()
}

如上所示:该函数进行调用时,指向window

2.对象调用方式(对象名.函数名())====点前面是谁this就指向谁

   var obj = {
        a:function(){
            console.log(this);
        }
    }
    div.onclick = function(){
       obj.a()
    }

该this指向源对象obj

 3.定时器调用:通过定时器调用的函数都指向window

 4.事件处理函数:this指向事件源(绑定该事件的元素)

强制改变this指向

        1)call

            语法:函数名.call()

            参数:call里边第一个参数是this的指向,从第二个开始往后的就是形参赋值

            特点:改完立即调用

    fn.call(obj, 10, 20, 30, 40)
    fn()

       2)apply

            语法:函数名.apply()

            参数:第一个参数是this指向,第二个参数是一个数组或者伪数组,数组中的每一项是形参赋值。

            特点:改完立即调用

fn.apply(obj, [10, 20, 30, 40])

fn()

        3)bind

            语法:函数名.bind()

            参数:第一个是this指向,第二个参数爱是一次是依次形参赋值(传参和call一样)

            特点:改完不会立即调用,而是返回一个新的函数,新的函数中就是改完this指向之后的

    var res =  fn.bind(obj, 10, 20, 30, 40)

    res()

    console.log('=========');

    fn()

3.新增的变量let和const

在es6新语法中新增了2个定义变量的关键字

        分别是let和const,let我们叫做变量  const我们叫做常量

        let和const  与   var的区别:

            1.从预解析角度分析

                let和const没有预解析,所以要求变量必须先定义在使用,如果定义之前使用会报错

                var会做预解析,所以定义之前用和定义之后用都不会报错

            2.重复的变量名

                let和const在定义的时候不允许出现重复的变量名,重名直接报错

                但是var在定义的时候出现重复的变量名是不报错的

            3.块级作用域

                var定义的变量是没有块级作用域的,只有函数的{}才能显示var的使用范围

                let和const定义的是有块级作用域的

                什么叫块级作用域?任何一个可以执行代码的{}都叫做块级作用域,都可以限制变量的使用范围

        let和const的区别

            4.修改值的问题

                let定义的量后期值是可以修改的

                const定义的量后期值不允许修改

                let一般叫做变量  const一般叫做常量

                一般我们获取元素都是在一开始获取依次,后期就再也不获取,再也不更改了,所以一般获取元素可以使用const去定义

            5.初始值的问题

                let定义的可以不写初始值,因为后期再赋值也可以

                const定义的必须写初始值(因为const后期无法再重新赋值,如果一开始就不写初始值,以后就都没有,所以规定必须写)

4.内存问题

        基本数据类型是直接存储在栈空间中,复杂数据类型是名字存储在栈空间中,真实的数值存储在堆空间中,会把堆空间的地址给到变量。

        在赋值时:

            基本(简单)数据类型:是直接把数据复制一份给到另外一个人,2个人互不影响

            复杂(引用)数据类型在赋值的时候不会把真实的数据给另一个人,而是会把存放这个数据的空间地址给另一个人

            那么这样就会造成2个人共用同一个空间地址,一个人改变了空间里的东西,另外一个人一定会受到影响。

5.箭头函数

箭头函数是es6中推出的新的定义函数的方式

        其实就是对声明式函数、赋值式函数(匿名函数)的简写形式

        箭头的语法:()=>{ }

        ( )中是写形参的,=>就是箭头函数的标志,{ }就是函数中代码段的

        特点:

            1.省略function不写

            2.还可以省略小括号()不写,形参只有1个的时候才可以省略

                如果没有形参或者有1个以上的形参小括号()必须写

            3.{ }也可以省略不写,前提:函数体内只有一句代码的时候

                如果不写{ }会把这句话当作返回值。

            4.箭头函数中是没有arguments的

                在普通函数中天生自带一个叫做arguments的东西,它里面存储了所有的实参

            5.箭头函数中没有this

                但是如果你在箭头函数中写了this,那么这个this到底指向谁呢。

                箭头函数自己没有this,他会用他父亲函数的this

            6.不能当作构造函数函数

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值