zoukankan      html  css  js  c++  java
  • js 提升

    a = 2;
    console.log(a);
    var a;
    /*这里会输出2  如果按从上往下的执行顺序的话应该输出的是undefined,但是js编译器会把声明变量全部提升到顶部来进行变量声明。所以上面代码等同于:*/
    
    var a;
    a = 2;
    console.log(a);

    从上面例子初步理解了js变量提升后再看下面个例子:

    console.log(a);
    var a = 2;

    按常规逻辑大多人肯定认为会输出2  结果是undefined  为什么呢   因为只有声明本身才会被提升   赋值是不会提升的 因为赋值不是编译阶段的事情,所以上面代码等同于:

    var a;
    console.log(a);
    a=2

     函数提升:

    foo();
    
    
    // function foo() {
    //     console.log('foo');//这里会正常输出
    // }
    var foo = function () {
        console.log('foo');//这里则会报typeerror
    }
    
    //说明函数声明会被提升  而函数表达式则不会提升

     函数提升优先级更高:

    foo();
    
    var foo;
    
    function foo() {
      console.log('foo');  
    }
    
    /*
    按照常规思维  函数和变量都提升了  为什么这里不会报typeerror错误 而是正常输出呢  因为函数声明的优先级高过变量声明   所以函数foo声明之后 变量foo属于重复声明而被自动忽略了
    */
  • 相关阅读:
    Sparc 10 with Simics
    Perl log 0906
    FPGA flow
    SV program与module的区别
    [基础]Verilog的$readmemx介绍
    [转载] 我对验证的一些理解
    我的书单
    boost 1_45_0 boost\cstdint.hpp 在 VS8下的 bug stdint.h 无法找到头文件
    Inside DllMain
    NoSQL数据库笔谈(转载)
  • 原文地址:https://www.cnblogs.com/tudou1223/p/9863163.html
Copyright © 2011-2022 走看看