写点什么

JS 作用域与作用域链

作者:程序员海军
  • 2022 年 7 月 25 日
  • 本文字数:714 字

    阅读完需:约 2 分钟

JS作用域与作用域链

作用域

局部作用域

一般只在固定的代码片段内可以访问得到
复制代码


function add(){    var name = "测试"    console.log(name)}add()// console.log(name) name is not defined
复制代码

全局作用域

var name = "外部"function add(){    var name = "测试"    console.log(name)}add() console.log(name) 
复制代码

作用域链

var name = "Out"function out(){    var inOut = "In";    function  inTao(){        console.log("inTao---------------"+inOut)         //undefined , 为什么会是undefinded呢,         //因为它先会从自身作用域中查找是否有inOut,如果有,并且inOut 提前在前面申明,那么就会正确显示值;否则显示undefinded,因为它只知道当前环境下有一个inOut        var ss = name;        var inOut = ss;        console.log("赋值后的ss-----------"+ss) //Out        console.log("inTao修改后的inOut-----------"+inOut)   // Out    }    inTao()}console.log("外部的name---------------"+name)  // Outout()
复制代码


  • 作用域链相关知识的总结:


1.执行环境决定了变量的生命周期,以及哪部分代码可以访问其中变量

2,执行环境有全局执行环境(全局环境)和局部执行环境之分。

3.每次进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链

4.函数的局部环境可以访问函数作用域中的变量和函数,也可以访问其父环境,乃至全局环境中的变量和环境。

5.全局环境只能访问全局环境中定义的变量和函数,不能直接访问局部环境中的任何数据。

6.变量的执行环境有助于确定应该合适释放内存。

作用域链始终遵循 从里往外一层一层寻找
自己的变量对象----->变量外部()局部环境的变量对象 ----->全局环境的变量对象。
发布于: 3 小时前阅读数: 14
用户头像

还未添加个人签名 2020.04.02 加入

🏅目前从事物流,铁路相关的前端全栈开发工作. 🏆2021年InfoQ写作平台-签约作者 🏆 🏆微信公众号:【前端自学社区】

评论

发布
暂无评论
JS作用域与作用域链_7月月更_程序员海军_InfoQ写作社区