• js的变量提升


    js的变量提升

    找到所有的var关键字,把var的执行,提升到作用域顶端,也就是var声明提前了,但是赋值还是在原地。例如:

    console.log(a);   //undefined
    var a=10;
    console.log(a);   //10
    

    执行过程变成了如下:

    var a;
    console.log(a);
     a=10;
    console.log(a);   //10
    
    let中不存在变量提升
    // var 的情况
    console.log(foo); // 输出undefined
    var foo = 2;
    // let 的情况
    console.log(bar); // 报错ReferenceError
    let bar = 2;
    
    声明会提升到作用域顶端
    a = 1;
    var a;
    console.log(a); //1
    

    当在函数作用域中操作一个变量的时候,会先在自身作用域中查找,如果有就直接使用,如果没有就向上级作用域中寻找。如果全局作用域中也没有,那么就报错。

    根据内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称为函数作用域链

    作用域链的原则:就近原则

        console.log(v1);
            var v1 = 100;
            function foo() {
                console.log(v1);
                var v1 = 200;
                console.log(v1);
            }
            foo();
            console.log(v1);
    
    js中var的变量和function的函数名重名时的执行结果

    如果var的变量和function的函数名重名时,var的优先级更高,先执行var,按照var划分区域,但是遇到function,function会直接占用,也就是说最终执行function

       console.log(a);  //f a(){}
       var a=10;
       function a(){
       };
       console.log(a); //10
    

    执行过程如下:

       var a;
       function a(){
       };
       console.log(a);  //f a(){}
        a=10;
       console.log(a); //10
    
    声明式函数是整体提升
     	   fn(); //hello
            function fn() {
                console.log("hello");
            };
            fn(); //hello
    

    执行过程如下:

       function fn(){
           console.log("hello");
       };
    
       fn();
       fn();
    
    请用今天的努力,让明天没有遗憾。
  • 相关阅读:
    class线程信息
    Class 文件简介
    JVM对象及垃圾回收处理
    jvm体系结构
    查找

    二叉树
    队列


  • 原文地址:https://www.cnblogs.com/cupid10/p/12793196.html
Copyright © 2020-2023  润新知