zoukankan      html  css  js  c++  java
  • 对于一些作用域自己的理解,望能帮助某人

    (function(){
    aa();
    f2();
    var f1 = function aa(){};
    function f2(){
    alert(1);
    }
    })();

    // 按照代码的执行顺序从上往下而言,在执行到未定义函数时报错 aa()未定义( aa is not defined )报错后就此就会中断,后面代码不在执行
    //var f1,function f2(){}; //hoisting,被隐式提升的声明
    // 上面代码中函数声明f2被提升,所以在前面调用f2是没问题的。虽然变量f1也被提升,但f1提升后的值为undefined,其真正的初始值是在执行到函数表达式处被赋予的。所以只有声明是被提升的。

    // var a = 1;
    // function outer(){
    // var b = 2;
    // function inner(){
    // var c = 4;
    // console.log(a);
    // }
    // inner(); //调用inner函数
    // }
    // outer(); //调用rainman函数

    //JavaScript的作用域链
    //观察alert(a);这句代码。JavaScript首先在inner函数中查找是否定义了变量a,如果定义了则使用inner函数中的a变量;如果inner函数中没有定义a变量,JavaScript则会继续在onter函数中查找是否定义了a变量,在这段代码中outer函数体内没有定义a变量,则JavaScript引擎会继续向上(全局对象)查找是否定义了a;在全局对象中我们定义了a = 1,因此最终结果会弹出'1'。

    //作用域链:JavaScript需要查询一个变量x时,首先会查找作用域链的第一个对象,如果以第一个对象没有定义x变量,JavaScript会继续查找有没有定义x变量,如果第二个对象没有定义则会继续查找,以此类推。

    //上面的代码涉及到了三个作用域链对象,依次是:inner、outer、window。

  • 相关阅读:
    1822. Sign of the Product of an Array
    1828. Queries on Number of Points Inside a Circle
    1480. Running Sum of 1d Array
    C++字符串
    Git&GitHb学习记录
    54. Spiral Matrix
    104. Maximum Depth of Binary Tree
    110. Balanced Binary Tree
    136. Single Number
    19、泛型入门
  • 原文地址:https://www.cnblogs.com/lrbee/p/6011550.html
Copyright © 2011-2022 走看看