return函数、转变this指向

一.return函数

1.所有表达式都有返回值,我们自己写的函数默认返回值都为undefined。
当我们console一个函数时,会打印函数的本身。

        function a(){
            console.log(123)
            return function(){
                console.log(78)
            }
        }
        let x = a()  //此处将函数a的返回值给x,x还是一个函数
        console.log(x)   //此处a执行了一下,打印123,x为函数,所以打印函数function(){ console.log(78)}
        console.log(x())  //此处函数x执行了,打印78,因其又打印函数的返回值,所以为undefined
        console.log(a)  // 此处打印function(){ console.log(78)}
        a()   // 123
        a()()  // 123 78

2.rerurn会立即结束一个函数,且return只对最近的函数有效

        function fn(){
            console.log(1)
            console.log(2)
            return
            console.log(3) // 此处打印1,2,不会打印三
        }

二.this指向补充

1. 全局this

函数的作用域是在定义函数时决定的,不是执行时决定的;this 指向是在执行时决定的,不是定义时决定的。

 		console.log(this)  // window
        function aa(){
            console.log(this)   // window
        }
        aa();
        document.onclick = aa   //document,事件被执行,指向事件触发的主体
       let csdn = {
            name:"csdn",
            say:function(){
                console.log(this)
            }
        }
        csdn.say();  //构造一个对象,执行里面的函数,this指向对象本身

场景:

  • 函数自执行,this指向window
  • 函数被执行,this指向事件对应的节点
  • 函数为对象里面的某个属性时,this指向这个对象
2. this指向的改变

call

        function a(){
            console.log(this)
        }
        a()  //window
        a.call(document)  //document

bind

        let s = {n:1,a:2}
        function a(){
            console.log(this)
        }
        document.onclick = a.bind(s)

call和bind的区别:
添加到事件函数中去时,call会自动执行一次,而Bind不会,所以若将上段代码中的bind换为call,不用点击就会打印对象s。

apply

        function a(){
            console.log(this)
        }
        a()     //window
        a.apply({y:20})   // {y:20}

apply也不会自动执行,和call的区别如下:

        function fn(a,b){
            console.log(a+b)
            console.log(this)
        }
        fn(1,2)   // 3  window
        fn.call({x:10},1,2)  // 3  {x:10}
        fn.apply({y:20},[1,2])  // 3  {y:20}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值