zoukankan      html  css  js  c++  java
  • js作用域之常见笔试题,运行结果题

    笔试题中经常有运行结果题,而大多体型都是围绕作用域展开,下面总结了几种相关的题:

    1. 外层的变量函数内部可以找到,函数内部的变量(局部变量)外层找不到。
      function aaa() {
              var a = 10;
      }
      alert(a);//Error a is not defined  由于a是函数内部定义的局部变量,根据作用域关系,外层(全局环境)访问不到局部变量。因此会报错
      var a=10;
          function aaa(){
              alert(a);
          }
          
          function bbb(){
              var a=20;
              aaa();
          }
          bbb();//10  由于aaa()执行时aaa的作用域链中a=10;
    2. 当var不加时,会自动生成全局变量(不建议这样写,一般定义变量时建议使用var关键字)
    function aaa() {
        var a = b = 10;//b未用var定义相当于全局变量,所以在函数外能够被访问到
    }
    aaa();
    //alert(a);//会报错,a is not defined
    alert(b);//10    相当于全局变量可以访问
    
     //此时上面代码相当于以下代码
     var b;
     function aaa() {
         b = 10;
         var a = b;
     }
     aaa();
     alert(a);//Error
     alert(b);//10

           3.变量的查找是就近原则,找就近var定义的,就近找不到的话则在外层寻找。

    var a=10;
        function aaa(){
            alert(a);
            var a=20;
        }
        aaa();//undefined   就近原则找到var定义的,预解析过程

           4.当参数和局部变量重名时,优先级等同。

    var a=10;
    function aaa(a){
          alert(a);
           var a=20;
    }
    aaa(a);//10  由于参数和局部变量优先级等同,所以查找时找到局部变量10然后再是var定义的局部变量
    var a=10;
        function aaa(a){
            var a=20;
            alert(a);
    
        }
        aaa(a);//20  局部变量将参数覆盖了,因此a值为局部变量的值
    var a=10;
        function aaa(a){
            a+=3;//基本类型 /参数相当于局部变量,只是局部修改了a的值,而在全局访问时依然是全局的值
        }
        aaa(a);
        alert(a);//10 
    var a=[1,2,3];
    var b=[1,2,3];
    function aaa(a,b){ a.push(4);
         b=[1,2,3,4]; } aaa(a,b); alert(a);
    //[1,2,3,4] 引用类型是引用的地址,所以局部修改会影响全局的值
    alert(b);//[1,2,3]
  • 相关阅读:
    Feed back TFS 2017 RC upgrade status to product team in product group 2017.03.01
    TFS Training for Kunlun bank (http://www.klb.cn/) 微软研发流程(ALM)管理培训会议(昆仑银行) 2016.09.21
    微软DevOps软件开发高级培训课程(深圳站) 2016.04.06
    秒杀系统架构设计
    程序员职业规划
    程序员跳槽时,会遇到哪些套路?
    程序员3大点
    程序员37个小贴士
    程序员6大点
    程序员面试 10 大潜规则
  • 原文地址:https://www.cnblogs.com/hxc555/p/5931914.html
Copyright © 2011-2022 走看看