通过代码简单了解什么是JavaScript的词法作用域

词法作用域

简单的通过两段代码说一下什么是词法作用域
/* 
 * @ 1.词法作用域:
 *     基本概念:先看以下函数init创建了为name的局部变量和一个名为displayName的函数,
 *              但是displayName是定义在函数内容的局部,仅在init函数内容可用,外部调
 *              会报错,这里displayName是没有name这个变量的,然而他在init调用之后是
 *              可以弹出name值为张三的这个变量,所以他是一个闭包,所为词法这一词,具
 *              体就是指根据声明变量或者函数的位置确定该变量(函数)在何处使用。
 */
    function init() {
        var name = "张三"
        function displayName() {
            alert(name)
        }
        displayName()
    }
    init()

这里是在知乎上看到的一个评论,对闭包的一个精简版的理解
在这里插入图片描述

/* 
 *  @ 2.作用域:
 *      先说作用域:作用域就是指程序源代码中定义变量的区域
 *                 作用域规定了如何去查找变量,也就是确定当前执行代码对变量的访问权限
 *      在JS中采用了词法作用域也就是静态作用域
 *  @ 3.静态作用域和动态作用域
 *      区别:
 *          在JS中是采用了词法作用域,函数的作用域在函数定义的时候就决定了,
 *          而与词法作用域正好相反的就是动态作用域了,函数的作用域是在函数
 *          调用的时候定义的。
 *  @ 4.举例
 *      上面的都是关于作用域的概念,下面这个例子很好的解释了什么是词法作用域,先看执行顺序
 *      
 *      定义了一个名为value的变量,还有两个函数foo和bar在foo内打印value的值,根据执行顺序
 *      可以得知,调用bar函数执行foo函数,先从foo函数内部查找如果有value这个局部变量,打印
 *      出结果,没有的话根据书写的位置,查找上面的一层代码,最后得出结果也就是value等于1,打
 *      印结果也是为1。(其实就是一个函数作用域链的过程)
 *
 *      反观: 动态作用域打印结果这里只讲打印过程
 *           调用bar函数,执行foo,查找value局部变量,没有那么ok,调用bar函数作用域,有value
 *           值为666,好了最后打印结果为6666
 */
    var value = 1;

    function foo() {
        console.log(value)
    }

    function bar() {
        var value = 666;
        foo()
    }
    bar()

断点调试gif图
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值