zoukankan      html  css  js  c++  java
  • 关于作用域

    关于作用域,可能大家都在用,但是真正能说的清楚的却不多,我呢也只是简单谈一下我所了解的比较浅的认识。

    作用域顾名思义可以分“作用”和“域”:

    域:空间、范围、区域……

    作用:读、写

    我们写的s内容都知道是在<script></script>里面,其实这就相当于是一个作用域,而在这个作用域里的内容还分为全局变量和局部变量。我们所写的js呈现出的好多效果主要是靠js解析器来解析的,是自上而下,由里到外一步步的进行的。

    js解析器的主要工作原理是:

    1)“找一些东西” :var function 参数
            a = ...

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

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

            所有的函数,在正式运行代码之前,都是整个函数块

            JS 的预解析

            遇到重名的:只留一个

            变量和函数重名了,就只留下函数

    2)逐行解读代码:

            表达式:= + - * / % ++ -- ! 参数……

            表达式可以修改预解析的值!

    接下来写几个简单的例子,来看看通过js解析器有规律,有顺序的解析之后返回的值是什么:

    alert(a);                    // function a (){ alert(4); }
    var a = 1;
    alert(a);                    // 1
    function a (){ alert(2); }
    alert(a);                    // 1
    var a = 3;        
    alert(a);                    // 3
    function a (){ alert(4); }
    alert(a);                    // 3
    var a = 1;
    function fn1(){
        alert(a);                        // undefined
        var a = 2;
    }
    fn1();
    alert(a);                            // 1
    var a = 1;
    function fn1(){
        alert(a);                        // 1
        a = 2;
    }
    fn1();
    alert(a);                            // 2
    var a = 1;
    function fn1(a){
        alert(a);                        // undefined
        a = 2;
    }
    fn1();
    alert(a);                            // 1
    var a = 1;
    function fn1(a){
        alert(a);                        // 1
        a = 2;
    }
    fn1(a);
    alert(a);                            // 1

     以上例子,通过js解析器的逐步解析将得出不同的结果,当然前提还是遵循以上所提到的两个规则。

    所以,一定要熟练掌握其中的精髓,好清楚了解有些js产生的不同结果。有点拗口,但是还是希望大家对你有帮助!加油!

  • 相关阅读:
    .NET面试题系列[2]
    .NET面试题系列[1]
    被淡忘的c#析构函数
    关于Spring IOC容器解释
    工作随笔记 点击除div自身之外的地方,关闭自己
    js获得控件位置
    PHP如何判断对象为空的方法分享
    PHP 网页调用本地exe程序实例
    PHP jQuery实现上传图片时预览图片的功能实例
    Yii 自带的分页实例
  • 原文地址:https://www.cnblogs.com/web001/p/8012924.html
Copyright © 2011-2022 走看看