zoukankan      html  css  js  c++  java
  • javascript 关于语义化作用的理解

    看代码实例1

          var a=1;
            function  m(a){ //此处为形参第一个传入函数的参数,既为arguments[0]
                alert(a);  //此处a为与形参绑定的
            }
            m(a);//1   此时的a为把变量a当作参数传入函数
    .......................................................................................................
            var a=1;
            function  m(a){
                alert(a);
            }
            m();//undefind 因为没有传入参数 所以与函数内a绑定的为空,因此alert一个undefined

     代码实例2

      var a=1;
            function  m(){ //函数创建时就将会将创建环境中的一些变量和对象保存在自己的作用域中,这也就是说函数的定义域取决于定义的位置,这就是语义化作用域,区别于c语言的块级作用域
                alert(a);
                alert(b);
            }
            function n(){
                var a=5;
                var b=3;//
                m();
            }
            n();// alert a为1,到b时报错 is not defined
            m();// alert a为1,到b时报错 is not defined

    可见函数m在创建时,已经将自己绑定到创建环境的作用域中,此处既为全局作用域,当在函数n中调用时,它并不会向函数n的私有作用域内去寻找变量,所以函数n内定义

    的a和b不会出现在函数m的作用域链中,结果如代码中注释所示。

    代码实例3

          var a=1;
            function  m(a){ //此处的a和函数里面的a都为形参,与第一行声明的a变量没有任何关系,它们没有实例2中的绑定关系
                alert(a);
            }
            function n(){
                var a=5;// 
                m(a);//将变量a传入函数m,当需要alert a时,就会将a的值alert,
            }
            n();//5
            m();//undefind

    此处因该区分形参与变量的区别。

    关于匿名函数的作用域更加复杂,等睡个好觉再起床整理一下。

  • 相关阅读:
    Git 菜鸟变大神 (一) 本地仓库的创建和初始化
    Dubbo项目实战 (二) 注册中心zookeeper-3.4.6集群以及高可用
    Dubbo项目实战 (一)服务划分粒度
    枚举类的理解和应用
    全文检索原理及实现方式
    MinIO简介和java Api的使用
    js金额转中文大写
    文档相关工具
    JS特殊监听方法
    注解的使用、拦截器使用、AOP切面使用
  • 原文地址:https://www.cnblogs.com/xueandsi/p/5965733.html
Copyright © 2011-2022 走看看