超易懂全局作用域 函数作用域 块级作用域

一.全局作用域

  • 变量的声明  直接在script中声明就是全局变量  与window属性挂钩
console.log(window.a);  //undefind  因为a提升到了顶部,赋值还在原位置,所以等于undefind 
var a = 1
console.log(window.a);  //1  window可省略
  • 注意:let const 不与window挂钩  指向undefind
  • 函数的声明
          foo()    //Function foo  函数提升到了顶部
          function foo(){
            console.log('Function foo');
          }
          foo()  //Function foo

         foo2()  //foo2 is not function 因为foo2提升到了顶部,赋值还在原位置所以等于undefind
          var foo2 = function(){
             console.log("Function foo2");
          }
         foo2() //Function foo2

二,函数作用域

  • 在函数内部声明的变量又叫局部变量
        (function(){
            --------直接声明函数---------
            asc()  //123456  直接声明函数会提升到函数作用域顶部
            function asc(){
                console.log("123456"); 
             }
            asc() //123456
             
            ----------赋值声明函数----------
            asc2() // asc2 is not function //因为asc2 提升到了函数作用域顶部 
            var asc2 = function(){
                console.log("123456789");  
            }
            asc2() // 123456789

          }())
  • 注意,如果变量提升和函数提升同时在的话 函数优先

三,块级作用域

  • 抛开let var const  在块内声明变量

   console.log(b);//b is not defined   
    {
        console.log(b);//b is not defined
        b = 3
        console.log(b); //3
    }
    console.log(b); // 3
  • 当抛开const var let 环境的时候  块内默认声明的变量必须执行完代码块的内容才会有效 window才会有b这个属性
  • 块级作用域变量的声明
        console.log(a);  //undefined 重新声明个var a = undefined
        {
            console.log(a);     //undefined  a提升到了块级作用域顶部 赋值留在原位置
            var a = 1
        }
        console.log(a); // 1   为全局a赋值
  • 块内定义的变量会被提升到全局 也会提升到块级作用域顶部 重新声明个关键次 赋值undefined,执行完块内变量后重新赋值 
  • 问题来了,下面一句代码很诧异
  console.log(a);  //undefind  
        {
           function a(){}
        }
  • 输出 undefined 还记得块内的默认变量吗?它如果这样子写会报错的,但是函数声明就不会,因为正如阮一峰老师那篇文章所说

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值