• js作用域和作用链


    js中函数嵌套是非常普遍的,那么子啊函数嵌套中,变量时怎么寻找的?

    答:首先在内层中寻找,找不到的话就跑的外层寻找,

    ……直到跑到window顶层(全局)为止

    ——————————————————————————————

    声明变量时加var和不加var的区别,

    答:加var才是声明变量。不加的话是赋值操作(不要狭隘的理解为声明了一个全局变量),会在函数内部找变量,找不到往上层找,还没有的话找到window,并赋值。

      js中 允许在定义变量的时候 不加var 修饰符。
    -》不加var 修饰符。js会在当前作用域下寻找上下文是否定义了此变量, 如果没有找到则会为这个变量分配内存。当且将其视为window的成员。 也就是全局变量。
    -》如果加了var 修饰符。 js会重新为这个变量分配内存,不论当前上下文中是否已经定义过了。这个变量的作用域就为当前上下文。 即局部变量。

     1 <script type="text/javascript">
     2 
     3 function t1() {
     4     var d;
     5 
     6     function t2() {
     7         d = 5;
     8         e = 6;
     9     }
    10 
    11     t2();
    12 }
    13 
    14 
    15 t1();
    16 
    17 console.log(e); // 6
    18 console.log(d); // d is not defined错误
    19 console.log(window.d); // undefined
    20 
    21 /*
    22 注意:
    23 以window.xxx引用全局变量,寻找不到,做为某个属性不存在,返回undefined
    24 直接以xxx引用某命题,寻找不到,则是报xxx is not defined错误
    25 */
     1 <script type="text/javascript">
     2 
     3 /*
     4 作用域考试
     5 
     6 注:这是一个极容易出错,又极基础的JS面试题
     7 */
     8 
     9 
    10 /*
    11 var str1 = 'global';
    12 
    13 function  t1() {
    14     console.log(str1);
    15     console.log(str2);
    16 
    17     str2 = 'local';
    18 }
    19 
    20 t1();  
    21 
    22 
    23 
    24 常见的3种答案
    25 global , local
    26 global , undefined
    27 global , str2 is not defined错误
    28 
    29 分析: 
    30 
    31 19行执行, 在t1内寻找str1--没有,又在window上寻找str1,有. 打印global
    32 20行执行, 在t1内寻找str2--没有,又在window上寻找str2,没有. 报str2 is not defined错误
    33 22行: (实际上出错,没执行到这一些)  才把全局的str2变量赋上值
    34 */
    35 
    36 
    37 var str1 = 'global';
    38 
    39 function  t1() {
    40     console.log(str1);
    41     console.log(str2);
    42 
    43     var str2 = 'local';
    44 }
    45 
    46 t1();   // global undefined
    47 
    48 /*
    49 解释:
    50 
    51 js代码自上而下执行!
    52 
    53 但是----------
    54 js代码在整体运行分:
    55 
    56 词法分析期
    57 运行期
    58 
    59 自上而下执行之前 , 先有一个"词法分析过程"!
    60 
    61 
    62 此上面的结果为例:
    63 
    64 
    65 1步:分析t1函数
    66 
    67 t1{
    68 var str2    // 分析出 t1内有str2局部变量. 注意此时函数未执行,因此str2的值是undefined
    69 }
    70 
    71 2步: 执行t1函数
    72     console.log(str1);   // global
    73     console.log(str2);   // undefined
    74     str2 = 'local';  // 此时,str2的值为local
    75 
    76 */
    77 
    78 
    79 /*
    80 
    81 词法分析是我们的一个重点
    82 
    83 */
    84 
    85 
    86 
    87 
    88 </script>
  • 相关阅读:
    史上最全的maven pom.xml文件教程详解
    Java中的断言Assert
    Log4j详细配置
    (实战篇)SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
    Java的反射机制
    mysql数据库常用SQL语句
    响应式布局——@media详解
    CXF使用教程(三)——基于Spring的webService开发
    CXF使用教程(二)——webService自动生成客户端代码
    Spring事务管理
  • 原文地址:https://www.cnblogs.com/a2762/p/4119633.html
Copyright © 2020-2023  润新知