ECMAScript确认变量的值的流程

来看一段代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>ECMAScript确认变量的值的流程</title>
</head>
<body>
    <script>
        var num=10;
        function fn(num){
            var num=8;
            return num;
        }
        alert(fn(5)+num);
    </script>
</body>
</html>

每一句ECMAScript代码都运行在一个包围这些语句的‘容器’中。例如函数体中的语句就被函数包围着,而直接写在<script>标签中的语句也被一个全局容器包围着,当然这个全局容器在页面中只有一个,跟<script>标签的个数无关。ECMAScript把这样的‘容器’称为代码的执行环境。

那么ECMAScript如何确定变量的值?

(1)确定调用变量这条语句所在的执行环境E

(2)在E中查找指定名称(变量声明时的名称)的变量值

(3)如果未查到,并且E已经是全局执行环境,返回undefined,否则扩大查找范围为包含E的执行环境,将这个新的执行环境称为E,并转到第二步

(4)如果查到变量值,返回给调用语句

对于函数而言,特殊的地方在于,如果形式参数与函数体内声明的变量同名,那么会优先使用声明的变量,而不是参数,但它们之间没有执行环境的包含关系,这主要是arguments对象的原因。通过这个规则,预判运行开头的代码将会弹出18

运行结果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值