作用域:就是作用的范围,指它在函数在哪些范围内可以用,而在其他部分不可以,要用就得重新定义。

一.全局作用域

    用 var 在全局(函数外)声明的所有变量,都具有全局作用域,即网页中所有脚本和函数均可使用  

        1.如果window对象的内在属性,则输出默认值,而非内置则undefined
        console.log(window.name);//空,内在属性
        console.log(window.abcd);//undefined,非内置

         2.直接使用的全局变量,就是window的内置属性
         console.log(window.name===name);//true

         3.如果var声明了window对象的内置属性作为变量,则内置属性值被覆盖
         var name='dayfly';
         console.log(name); //输出的结果是dayfly
         console.log(window.name);//也是dayfly
         如果var声明了一个非内置属性的变量 var的全局变量即window的属性
         var abcd='dayfly';
         console.log(abcd); //输出的结果是dayfly
         console.log(window.abcd);//也是dayfly
         console.log(window.abcd===abc);//true 等价
         
         所以就得出:浏览器环境有一个顶层对象window,其属性和var的全局变量等价

 

二.块级作用域(ES6新增的)

    在函数中用 var 声明的所有变量,都是函数的局部变量,具有局部作用域,即变量只能在函数内部使用,函数外部是不行的

   可以使用 let 关键字或者 const 关键字来实现块级作用域。

   {{{...}}}块级作用域支持多层嵌套,每一层均为封闭,只作用于此

    let或 const 声明的变量只在 let 或 const 命令所在的代码块 {} 内有效,在 {} 之外不能访问。

      如果块级区域不使用 let,就会造成全局变量污染问题
    怎么写一个块级函数:

 

         在函数外加个{  },让其变成块级作用域

     

 

posted on 2021-11-24 15:44  卡坦菲  阅读(216)  评论(0编辑  收藏  举报