• JavaScript-变量的作用域面试题


    块级作用域

    -      在其他的语言中,任何一对花括号中的语句都属于一个块,在这之中定义的所有变量在代码块外是不可见的

    -      JavaScript中没有块级作用域

    1   //这里只有函数中定义的变量,才不能被外部访问
    2   //这里的i和a变量,是可以在外面被访问的。
    3    for(var i = 0;i<0;i++){
    4     var a = 10;
    5
    6   }
    7   

    全局变量

    -      定义在script或者不属于某个函数的变量

    -  全局变量,可以在同一个文件中的两个Script代码使用

    1 <script type="text/javascript">
    2     var a=10;
    3 </script>
    4 <!--其他代码-->
    5 <scripr type="text/javascript">
    6     console.log(a);
    7     //这里仍然可以输出a的值
    8 <script>

    局部变量

    -      定义在函数内部的变量

    其他

    -      函数内部可以访问到该函数所属的外部作用域的变量(作用域链)

    -      不使用var声明的变量是全局变量,不推荐使用。

    注意:不使用var声明的变量,必须进行赋值,否则会提示变量不存在

    1 function(){
    2      a=1;
    3      console.log(a);
    4 }
    5 //这里是违法的,因为a没赋值
    6 function(){
    7      console.log(a);
    8 }

    -      变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁

    JavaScript中预编译的问题

    JavaScript在接收到script代码的时候,会先进行预处理,改变代码的顺序

    -      把代码的声明提前

    -      把函数的定义提前

    例如下面的代码

     1 var num = 10;
     2 fun();
     3 function fun(){
     4      condole.log(“兔子只吃胡萝卜”);
     5 }
     6 //JavaScript预处理后
     7 var num;
     8 function fun(){
     9      condole.log(“兔子只吃胡萝卜”);
    10 }
    11 num = 10;
    12 fun();

    由此产生的面试题

    1.输出的值是什么

     1 var num = 10;
     2 fun();
     3 function fun (){
     4      console.log(num);
     5      var num = 20;
     6 }
     7 //首先将其预编译
     8 var num;
     9 num = 1010 function fun (){
    11 var num;
    12      console.log(num);
    13      num = 20;
    14 }
    15 fun();
    16 //此时输出为undefined

    2. 输出是什么

     1 var a = 18;
     2 f1();
     3 function f1(){
     4      var b=9;
     5 console.log(a);
     6      console.log(b);
     7      var a = ‘123’;
     8 }
     9 //预编译
    10 var a;
    11 a = 1812 function f1(){
    13 var b;
    14 var a;
    15      b=916     console.log(a);
    17      console.log(b);
    18      a = ‘123’;
    19 }
    20 f1();
    21 //输出结果
    22 undefined
    23 9

    3. 输出什么

     1 //这里会牵扯到全部变量的定义,在函数中,如果没有用var定义的变量,是全局变量
     2 f1();
     3 console.log(c);
     4 console.log(b);
     5 console.log(a);
     6 function f1(){
     7      var a = b = c = 9;
     8      console.log(a);
     9     console.log(b);
    10     console.log(c);
    11 }
    12 //预编译结果
    13 var b;
    14 var c;
    15 function f1(){
    16 var a;
    17      a = b = c = 9;
    18      console.log(a);
    19     console.log(b);
    20     console.log(c);
    21 }
    22 f1();
    23 console.log(c);
    24 console.log(b);
    25 console.log(a);
    26 //输出结果
    27 9
    28 9
    29 9
    30 9
    31 9
    32 Uncaught ReferenceError: a is not defined//变量未定义
  • 相关阅读:
    redis 集群目标、集群查看、配置方法及过程、哨兵配置启动
    redis 事务、Jedis事务处理流程
    redis订阅与发布(把redis作为消息中间件)
    redis 管道技术 pipeline 简介
    redis 适用场景、缓存选择、java实现
    redis 数据淘汰策略与配置
    redis 持久化策略、aof配置、测试、手动持久化、aof文件体积优化
    redis 命令行查看修改配置文件项、配置文件说明
    redis HyperLogLog 基数估算
    redis 命令select、dbsize、清空数据库、info、client
  • 原文地址:https://www.cnblogs.com/tangwanzun/p/5967364.html
Copyright © 2020-2023  润新知