美文网首页
面试题2

面试题2

作者: 幸宇 | 来源:发表于2018-03-11 16:41 被阅读2次

有关前端面试中的运行题,变量的作用域

1.外层的变量,内层阔以找到(全局),内层的变量,外层找不到(局部)
         var a=10;
         function aa(){
             alert(a)
         }
         function bb(){
             var a=20;
             aa()
         }
         bb();// 10;
2.当var 不加的时候,会自动生成全局变量(不建议这样写,最好把所有要定义的变量加上var)
        function aa(){
            a=10;    
        }
        aa();
        alert(a) //10
        function aa(){
            var a=b=10;
        }
        aa();
        alert(a)  //a is not defined;
        alert(b)  //10;
3.变量的查找是就近原则去找var定义的变量,当就近没有找到的话,就会查找外层
        var a=10;
        function aa(){
            alert(a);//"undefined"  预解析,所以尽量在定义变量的时候尽量写在前面
            var a=20
        }
        aa()  

改:

        var a=10;
        function aa(){
            var a=20
            alert(a);
            
        }
        aa()  //"20"

再改:

        var a=10;
        function aa(){
            a=20
            alert(a);
            
        }
        aa()  //"20"

再改:

        var a=10;
        function aa(){
            alert(a);
            a=20
            
        }
        aa()  //"10"

再改:(变量作用域)

        var a=10;
        function aa(){
            bb();
            alert(a);
            function bb(){
                var a=20;
            }
        }
        aa() //10 
4.当参数跟局部变量重名的时候,优先级是等同的;
        var a=10;
        function aa(a){
            alert(a);
            var a=20;
        }
        aa(a);//10 
5.对象和基本变量之间赋值的差别,对象涉及到地址引用的问题
        var a=5;
        var b=a;
        b+=3;
        alert(a)//5
而对象:
        var a=[1,2,3];
        var b=a;
        b.push(4);
        alert(a)  //1,2,3,4
解决就是给b重新赋值:
        var a=[1,2,3];
        var b=a;
        b=[1,2,3,4]
        alert(a) //1,2,3
所以:
        var a=10;
        function aa(a){
            a+=3
        }
        aa(a)
        alert(a)  //10 从两个方便都可以解释,第一是从变量赋值的规则上,原来的a的值是不会变的,其次,在外面调用全局变量也只会找到a的值为10;
 所以:
        var a=[1,2,3]
        function aa(a){
            a.push(4)
        }
        aa(a)
        alert(a)//1,2,3,4  这里存在对象的地址引用的问题,所以a会是这样 

 所以,若是重新赋值则会不一样:
        var a=[1,2,3]
        function aa(a){
            a=[1,2,3,4]
        }
        aa(a)
        alert(a)//1,2,3  


相关文章

  • this的指向的面试题

    面试题1 面试题2 面试题3 面试题4

  • 面试所涉及的问题

    面试题参考1 : 面试题 面试题参考2 : 内存管理 面试题参考3 :面试题 ...

  • 面试材料

    面试经验 面试题1 面试题2 面试题3 面试题4 面试题5 面试题6――数据结构 面试题7――网络 面试题8――汇...

  • 前端面试比较好的文章

    1、前端开发面试题2、vue面试题总汇

  • Android 面试BAT大厂

    主要分为以下几部分: (1)java面试题 (2)Android面试题 (3)混合开发面试题 (4)高端技术面试题...

  • Android 面试BAT大厂

    主要分为以下几部分: (1)java面试题(2)Android面试题(3)混合开发面试题(4)高端技术面试题(5)...

  • android面试题和答案1

    主要分为以下几部分: (1)java面试题(2)Android面试题(3)混合开发面试题(4)高端技术面试题(5)...

  • l 主要分为以下几部分: (1)java 面试题 (2)Android 面试题 (3)高级开发技术面试题 (...

  • IOS面试(2018)

    经典面试题 非技术面试题 C面试题1 C面试题2 C面试题3 iOS笔试题01 iOS笔试题02 iOS笔试题03...

  • ios-面试题链接(四)

    经典面试题 非技术面试题 C面试题1 C面试题2 C面试题3 iOS笔试题01 iOS笔试题02 iOS笔试题03...

网友评论

      本文标题:面试题2

      本文链接:https://www.haomeiwen.com/subject/uyjwfftx.html