美文网首页
彻底搞懂JS作用域和作用域链

彻底搞懂JS作用域和作用域链

作者: Nicholas_liang | 来源:发表于2020-07-24 13:17 被阅读0次

    作用域和作用域链

    作用域:决定了代码区块中变量和其他资源的可见性;

               作用域最大的用处就是变量隔离,不同的作用域先同名变量不会冲突;
    

    ·全局作用域和函数作用域

    拥有全局作用域:
    
        ·最外层函数 和在最外层函数外面定义的变量拥有全局作用域
    
        ·所有末定义直接赋值的变量自动声明为拥有全局作用域
    
        ·所有window对象的属性拥有全局作用域
    

    作用域是分层的内部可以访问到外层作用域的变量反之则不行;

    值得注意的是:

    块语句(大括号“{}”中间的语句),如 if 和 switch 条件语句或 for 和 while 循环语句,不像函数,它们不会创建一个新的作用域。
    在块语句中定义的变量将保留在它们已经存在的作用域中。
    

    作用域链

    当出现自由变量的时候要找到这个自由变量(当前作用域没有定义),就要去他们父级作用域查找,若没有再向上一层去查找;
    
    直到找到全局作用结束;这一层一层的关系就是作用域链
    
    自由变量的取值:要到创建这个函数的作用域查找取值;(强调的是创建而不是调用)
    

    作用域和执行上下文的区别:

    执行上下文是执行的时候创建的,随时会改变;作用域是定义的时候确定的不能改变;
    
    同一个作用域下会产生不同的执行上下文环境,从而会产生不同的变量值
    

    JavaScript的执行分为:解释和执行两个阶段,这两个阶段所做的事并不一样:

    解释阶段:

    • 词法分析
    • 语法分析
    • 作用域规则确定

    执行阶段:

    • 创建执行上下文
    • 执行函数代码
    • 垃圾回收

    到这 应该理解了作用域和作用域链了吧!!! 🎉 🎉

    相关文章

      网友评论

          本文标题:彻底搞懂JS作用域和作用域链

          本文链接:https://www.haomeiwen.com/subject/ygejlktx.html