美文网首页
Javascript 变量执行过程 和 数组 & 对象的区别

Javascript 变量执行过程 和 数组 & 对象的区别

作者: lifeColder | 来源:发表于2017-05-23 08:10 被阅读0次

    变量提升

    var f = 1;
    function bar(){
        f = 10;
        function f(){
    
        }
    }
    bar();
    alert(f);
    顺序:1、提升bar,提升f
          2、f = 1
          3、bar函数执行,创建闭包
             3.1、提升函数f
             3.2、给函数f赋值了10
             3.3、函数执行完毕,闭包空间销毁
          4、alert(f) 弹出1
    

    JS执行过程
    1. 先提升(先提升函数,再提升变量,如果名字一样,变量提升会覆盖函数提升)
    2. 再执行,如果遇到闭包创建
    3. 在闭包空间中反复1和2
    4. 先定义(提升),在执行
    5. 变量提升
    6. 函数提升

    问题提出

    function change() {
      alert(typeof fn);
      function fn() {
        
      }
      var fn
    }
    change()
    

    为什么不是undefined?

    在js中函数的声明 比变量优先级要高
    并且定义过程不会被变量覆盖 除非是赋值

    你的代码相当于

    function change() {
       function fn(){}
       var fn;
       alert(typeof fn) // function 不会被覆盖
       fn=1;
       alert(typeof fn) // 1   会覆盖
    }
    change()
    

    数组和对象的区别

    var arr = [ , , , ,  ,];
    var obj = {
       xxx :xxx,
       xxx :xxx
    }
    

    注意 obj.xxxobj[xxx] 的区别

    第一种是规定obj必须得有那个属性,不可改变
    第二种可以动态添加属性,通过字符串的方式

    相关文章

      网友评论

          本文标题:Javascript 变量执行过程 和 数组 & 对象的区别

          本文链接:https://www.haomeiwen.com/subject/ndrwxxtx.html