关于JavaScript的一些基础

1.浏览器的js预处理

有如下的html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>example</title>
    <script>
        alert(a);
        var a = 12;
        function fn1() {
            alert(2);
        }
    </script>
</head>
<body>
</body>
</html>

浏览器逐行读取文件,在读取到<script>后,“JS解析器”开始了如下执行:

1)“找到一些东西” :例如 var function 参数 ……

        a = undefined

        所有的变量,在正式运行代码之前,都提前赋了一个值:未定义

        fn1 = function fn1(){ alert(2)};

        所有的函数,在正式运行代码之前,都是整个函数块(注意格式)。

2) 逐行解读代码

        解析器去第一步的“仓库”里面寻找,例如一上来alert(a),发现a未定义,就会弹出undefined。

        注意:预解析的时候:同名的函数和未定义的变量,会留下函数;表达式可以修改预解析的值。

举个例子:在<script></script>中有如下代码:

        var a=1;
        function fn1() {
            alert(a);
            var a=2;
        }
        fn1();
        alert(a);
  1. 第一步解析器发现script标签:进入全局作用域。首先预解析:发现 var a(未定义); function fn1(……;
  2. 然后逐行执行代码:fn1();此时进入另一个域:局部作用域。还是进行那个套路
  3. 预解析:发现var a(未定义);逐行解析代码:alert(a);//此时弹出未定义。然后var a=2;(但是不影响全局变量的a)
  4. 返回全局作用域后,执行alert(a);弹出1。

如果把上面的例子中的fn1中的a的var去掉,在局部域执行代码的时候,如果找不到a回去全局作用域中去找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值