• 参数传递--函数声明与变量声明优先级?


    javascript是一门解释性语言,自然没有编译过程,但在脚本执行之前会有语法检查和执行环境的构建,我们把这一过程姑且称为预处理吧。

    一、函数声明,javaScript解析器把函数提升

    fn();  //output  2

    var fn= function(){

    console.log(1);

    }

     

    function fn(){

    console.log(2);

    }

    fn();  //output  1

    首先,后面的fn()函数声明提前,所以第一个fn() 为2

    其次,后面定义的fn()覆盖前面声明的函数,所以后面执行的函数为字面两定义的函数,结果为1

    函数定义、函数声明、arguments三者优先级?

    function   fn(t){                   

       t();                                         @1 var t

      function t(){                        @2.var t=function(){console.log(1)}

        console.log(2);                  @3.var t=function(){consol.log(2)};

            }                                                        @4.t();

        

       var t = function(){      

            console.log(3);      

        }  

    console.log(t);

        }  

        fn(function(){console.log(1)});  //output  2

                                                            //output    function(){console.log(3);}

    @1.变量声明var t提升到最顶端

    @2.arguments中变量首先会覆盖var方式声明的变量(变量声明提升)

    @3.函数声明覆盖相同名字的变量

    优先级:函数形参>函数声明>变量声明(当变量声明遇到已经有同名的时候,不会影响已经存在的属性)

    函数形参---->名称和对应值组成的一个变量对象被创建,如果没有传递对应参数的话,那么由名称和undefined值组成的一种变量对象的属性也被创建

    函数声明---->名称和对应值(函数对象)组成的一个变量对象的属性被创建,如果变量对象已经存在相同的名称属性,则完全替换这个属性

    变量声明---->名称和对应值(undefined)组成一个变量对象的属性被创建,如果变量名称跟已经声明的形式参数或函数相同,则变量声明不会干扰已经存在的对象

    function aa(a,b,c){  @1.a=1  b=2  c=3  @2.a=function a(){}  @3.var a; var aa变量声明提升

             function a(){}                      

             console.log(a);                           

             console.log(aa);

             console.log(arguments);

             var a='ee';

             var aa='444';

             arguments=6;

             console.log(a);

             console.log(aa);

             console.log(arguments);

    }

    aa(1,2,3);

    输出结果:

    function a(){}

    undefined

    [function, 2, 3]

    ee

    444

    6

  • 相关阅读:
    超全面的vue.js使用总结
    Python3 [字典】类型 学习笔记
    Python3 [集合]类型 学习笔记
    Python 希尔排序法
    Python 堆排序法
    Python 归并排序法
    Python 冒泡排序法
    Python 选择排序法
    Python 快速排序法(转)
    Python 插入排序法
  • 原文地址:https://www.cnblogs.com/jiechn/p/4140470.html
Copyright © 2020-2023  润新知