JS作用域理解

作用域:全局作用域和私有作用域

全局作用域

  1. 当你打开一个页面,浏览器就会形成全局作用域为代码执行提供环境,在全局作用域会生成一个全局的大对象叫window
  2. 全局作用域一般不销毁,直到页面关闭,作用域才会销毁 • 全局变量 在全局作用域下声明的变量就是全局变量
let a = 12;
var b = 13;
function fn(){}
 // 1、用var和function声明的变量会在全局作用域下声明一个变量,而且也会给window增加属性,属性名是变量名,属性值是变量名存储的值(let不支持)
        // var s = 12;
        // function fn(){}
        // console.log(window.s)
        // console.log(window.fn)
        // let a = 12;
        // console.log(window.a) // undefined

// 2、var和function可以重复创建同一个变量名(let不可以)
        // var a = 12;
        // var a = 13;
        // console.log(a)
        let a = 12; // 报错  SyntaxError(语法错误)
        let a = 13;

        // function fn(){
        //     var e = 12
        // }
//3、 let不存在变量提升
// 4、let会形成块级作用域

私有作用域

  1. 全局作用域生成之后才会有私有作用域,私有作用域是属于全局作用域的 函数执行会形成一个私有栈内存(私有作用域)【为代码执行提供环境】
  2. 函数作用域中定义的变量,只能在函数中调用,外界无法访问。
    没有块级作用域导致了if或for这样的逻辑语句中定义的变量可以被外界访问,
    因此ES6中新增了let和const命令来进行块级作用域的声明。
     function fn(){
    /* 函数定义:
        1、首先开辟一个堆内存生成一个16进制的空间地址
        2、把函数体里的代码以字符串的格式存进去
        3、把16进制的地址赋值给函数名
     */
}
fn();
/* 
函数执行:
    1、首先开辟一个私有作用域(为代码执行提供环境)
    2、形参赋值
    3、变量提升
    4、代码从上往下执行
    5、作用域是否被销毁 
 */

作用域链 变量的查找机制

  1. 上级作用域 函数在哪里定义的,那么该函数执行形成的作用的上级作用域就是谁
  2. 了解了上级作用域, 就比较容易查找变量对应的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值