zoukankan      html  css  js  c++  java
  • 快速理解作用域

    一提起作用域,好多初学js的小伙伴会觉得很蒙圈,这个大可不用担忧,只要肯用心,没有学不会的知识,废话不多说,进入正题,首先说一下什么是作用域:

    一、作用域:

    先举一个小例子来感受一下什么叫作用域,比如说小明是希望小学的一名学生,小花是希望小学一年级的一名学生,那么要找到小明这个人,我们先得确定一个区域范围,已经知道小明是希望小学的学生,那他肯定就在希望小学这个区域中,想对于小明来说,学校就是他的作用范围,要找到小明,我们只需要在他所在的作用域中去找就ok了;那要找到小花就更容易了,它不仅在希望小学这所学校,还知道她在一年级,也就是说一年级就是小花所在的作用范围。

    在上面的例子中,希望小学是我们所提及到的最大的区域,可以看作是一个全局作用域,小明的范围锁定在学校,我们可以把小明看成是一个全局变量;一年级就是一个函数块,是全局作用域下的一个局部作用域,而小花就可以看作是一个局部变量。

    作用域:变量的作用范围。

    全局作用域:整个程序,从程序开始到结束。

    局部作用域:函数体。

    全局变量:在全局作用域中,变量都是有效的;在函数体的外部定义的变量都是全局变量;在函数体的内部没有var声明的变量,也有可能是全局变量

    局部变量:在局部作用域中,变量都是有效的;在函数内部明确使用var定义的变量或所有的形参;函数调用后,局部变量自动销毁。

            function fn(){
                var num = 10;
            }
            fn();
            alert(num);    //报错:num is not defined

    上面这段代码为什么会报错呢?

    我们在上面说过,函数调用后,局部变量自动销毁,当我们调用fn时,fn里的变量num会自动销毁,再输出num时,num已经被销毁,所以会报错。

    在了解了基本定义后,总结一下如何解析作用域:

    一、寻找:

            var;

            形参;

            函数块;

    二、逐行解析代码:

           1.找表达式;

           2.函数声明直接跳过(不调用不执行的原因);

           3.函数调用;

    为了加深理解,我们来看一些例子:

            var num = 19;
            function fn(){
                 var num = 10;
             }
            fn();
             alert(num);  //19

     原理:函数调用之后,局部变量自动销毁,所以输出的是全局变量num的值。

            var num = 19;
            function fn(){
                 num = 10;
             }
             fn();
             alert(num);  //10

    原理:当局部作用域中找不到var时,可以向它的父级全局作用域借,此时函数块里的局部变量就是全局变量19,因为给出num=10,所以将10赋给全局变量num,全局变量num=10,输出num=10.

  • 相关阅读:
    郁闷的出纳员 平衡二叉树(SBT)
    POJ 3225 Help with Intervals (线段树,区间成段更新)
    HDU 3038 How Many Answers Are Wrong (并查集)
    POJ 1733 Parity game (HASH+并查集)
    POJ 1417 True Liars(并查集+DP)
    POJ 2912 Rochambeau(枚举+并查集)
    UILabel添加发光效果
    TinyMCE integration with phpBB3
    快速重传与快速恢复算法
    TCP的超时与重传
  • 原文地址:https://www.cnblogs.com/kinoko-1009/p/10278481.html
Copyright © 2011-2022 走看看