javaScript中的function

     javascript中最难最恶心的也就是函数了,那就来说说函数吧

console.log(func); //undefiend

    {

      function func() {}

      foo = 1;

    }

    console.log(func); //function func(){}

    // 这个怎么理解呢,除了(obj,function)出现的大括号,其他的大括号中,出现的 大括号, 如果出现var,function函数都是会出现变量提升但在大括号之前不赋值,所以会出现undefiend,

    //遇见大括号,就会出现下面几步,1.会开辟作用域,2.变量提升,3.实例化this,arguments,4.执行代码块

    // 一切函数按照这样的思路做就不会出错,那接下来解释一下函数中的大括号,如果函数大括号中出现let/const/var 如果有形参,那么let/const不能跟形参名字一样要不然就会报错而如果出现var

    // 则不会报错,如果没有出现以上情况则会开辟两个作用域,第一个是函数私有上下文,第二个则是block作用域,里面存放var/let/const出的变量,但是还是做一个什么操作呢,如果函数体内有var出

    // 的变量跟形参相同,那么先会把函数私有的值赋给block,然后修改的是block中的值,并不是函数私有作用域中的值,如果block里面不存在就回去函数作用域中找,找到了就修改函数作用域中的值,

    //要不然则一层一层网上找,直到找到GO(window),那就看看下面的函数

    var x=3;

    function func(x,y=function(){x=2}){

      var x=8;

      console.log(x)//8

    }

    func(5)

    var x=3;

    function func(x,y=function(){x=2}){

       x=4;

      console.log(x)//4

    }

    func(5)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值