JS笔记:变量作用域

本文详细探讨了变量的生命周期及作用范围,介绍了静态作用域与动态作用域的区别,并重点讲解了JavaScript如何通过词法环境来管理作用域,包括环境记录初始化、函数解析过程等关键概念。

变量的生命周期
变量的作用范围

静态作用域(词法定义域)
由程序定义的位置决定


var x=10;
   function foo(){alert(x);}
   function bar(){var x=20;foo();}
  bar();//10

静态作用域

动态作用域
由程序运行时刻决定,使用动态栈管理。

JS使用静态作用域
JS没有块级作用域,有全局作用域和函数作用域
ES5中使用词法环境管理作用域

词法环境包括:
1、环境记录
形参
函数声明
变量
……
2、对外部环境的引用outer

环境记录初始化—声明提前(函数形参,函数声明,变量)
这里写图片描述

var x=10;
function foo(y){
  var z=30;
  function bar(q){
    return x+y+z+q;
    }
    return bar;
 }
 var bar=foo(20);
 bar(40); 

函数开始执行前,进行函数解析。
全局环境:(函数声明,函数定义前置到最顶部,变量前置,未赋值。)
环境记录:foo:
x: undefined
bar:undefined
outer:null
全局环境解析完后,开始执行,x赋值为10,bar赋值,需要执行foo函数,进行foo函数的函数解析:
foo函数环境变量:
环境记录:y:20(形参)
bar:
z:undefined
outer:全局环境
foo函数解析完成后,执行foo函数,z赋值为30,执行到return,return的是bar函数,执行bar函数,实际执行的是foo函数里面的bar函数。进行bar函数的解析:
bar函数环境变量
环境记录:q:40(形参)
outer:foo函数环境变量
执行bar函数,顺着outer环境去寻找变量

词法环境

词法环境—with

var foo ="abc";
with({foo:"bar"}){
    function f(){
        alert(foo);
    };
    (function(){alert(foo);
    })();
    f();
}

词法环境 try…catch

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值