精华内容
下载资源
问答
  • 前两天班级聚会,除了吃喝玩乐就是睡觉扯淡,甚是喜悦,真是独乐乐不如众乐乐啊。 PS:毕业的或即将毕业的有时间能聚就聚吧,毕了...在聊函数声明的声明提前之前,有必要介绍下函数定义的几种方法,大部分小伙伴们应该
  • 本文实例讲述了JavaScript的变量声明与声明提前用法。分享给大家供大家参考,具体如下: JavaScript的变量声明 JavaScript的变量声明语句无论出现在何处,都会先于其他代码首先被执行。使用var关键词声明变量的作用...
  • 1、什么是声明提前?  它是指当我们声明一个变量或是一个函数的时候,我们可以在起前面访问带该变量或函数;即:声明统一提前,赋值原地不变   2、变量声明提前  就是当我们声明一个变量的时候,我们可以在其...

    好久没有写这玩意儿了;今天在工作中遇到了这个问题,就拿出来分享下,希望对需要的朋友有所帮助,若有不足的地方,还请大神多多指出!

     

    1、什么是声明提前?

        它是指当我们声明一个变量或是一个函数的时候,我们可以在起前面访问带该变量或函数;即:声明统一提前,赋值原地不变

     

    2、变量声明提前

        就是当我们声明一个变量的时候,我们可以在其前方访问到它:这里就要提到一个函数作用域的概念:变量在声明它的函数体以及这函数体嵌套的任意函数体内都始终可见;这也就是变量的声明提前

      eg:   

        var a= 1

        function test () {

             console.log(a)   // undefined

             var a= 2

             console.log(a)    // 2

        }

    上面的这个例子可以解析成:

       var a=1

       function test() {

            var a;

            console.log(a)

            a=2;

            console.log(a)

        }

     

    3、函数声明提前

        函数声明提前的原理和变量声明提前类似;但需要注意的是:只有函数声明格式的函数才会声明提前   (像函数表达式、构造函数不会声明提前)

          a、函数声明格式: function  fun() { console.log('函数')}

          b、函数表达式:var fun = function () {console.log('函数')}

          c、构造函数: var fun = new Function(console.log('函数'))

      eg: 

       function test()  {
          console.log(a)   //函数a 本生

          function a() { console.log(a) }  

          console.log(a)  //函数本生

          a()   //能够执行,  函数本生

       }

       test()

       生面 的例子可以解析为:

      function test () {

          function a() { console.log(a)}

          console.log(a)

          console.log(a)

          a()

      } 

       test()

     

     下面再看一个例子:

       var sum=2

       function add(n) {

           return n= n+2;

        }

        var res= add(sum)

        console.log(res)

        function add(n) {

          return n= n+4

        }

        var res= add(sum)

        console.log(res)

    这个例子的结果是两个6;原因也是函数的声明提前;其代码等同于一下代码:

       var sum=2

       function add(n) {

          return n= n+2

       }

       function add(n) {

           return n= n+4

       }

       var res= add(sum)

       console.log(res)

       var res= add(sum)

       console.log(res)

     

    4、声明提前的先后顺序 

       函数声明提前,变量声明提前,到底谁会提前的更前??

       假设当两者的名字一样时,最后会输出什么呢? 看看下面这个例子

       function test() {

           console.log(a)   // 是函数本身

           var a='变量先输出'

           function a() { console.log(‘函数先输出’)} 

      }

      test()

      通过上面这个例子我们将会看到:最终输出的结果是一个函数本生,这是为什么呢?

      其实以上例子代码等同于一下代码:

      function test() {

          function a() {console.log('函数先输出')}

          var a   //上面的函数已经声明,相同的变量名声明会被忽略

          console.log(a)

          a='变量先输出'

      }

      test()

      这样按理说应该是输出‘undefined’, 为何是函数本生呢?

      这里是因为: 上面的函数已经声明,相同的变量名声明会被忽略 (而这里只是再次申明a,并未修改现有a的值

      这里可以举一个简单的例子:

        var a= 1

        var a 

        console.log(a)   // 1

     

    下面再看一个例子:

     console.log(xxp)   //‘undefined’

     var xxp= 1

     function fn() {

        console.log(xxp)  // 函数本身    function xxp() { console.log(xxp)}

        var xxp= 2

        function xxp() { console.log(xxp)}

        console.log(xxp)    // 2

        xxp()    //报错

     }

     fn()

     上面的代码等同于下面的代码:

     console.log(xxp)  // ‘undefined ’   声明提前

     var xxp= 1

     function fn() {

        function xxp() {console.log(xxp)}

        var xxp

        console.log(xxp)  // 函数本身  (当名字相同时,再次定义【没有赋值】会被忽略)

        xxp=2

        console.log(xxp)  // 2  这里进行了赋值操作    (函数已经不存在了,只有变量xxp)

        xxp()   // 报错; 这里没有函数了,只有变量xxp

     }

    fn()

     

    以上就变量、函数声明提前的概念和用法,以及之间的关系;若有不完善的地方,还望大佬指出,谢谢

     

      

    展开全文
  • 变量的声明提前 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值,它会在执行到那行代码的时候,才会有值),但是如果声明变量时不使用var关键字,则变量不会被声明提前。可能看起来会有点绕...

    变量的声明提前

    • 使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值,它会在执行到那行代码的时候,才会有值),但是如果声明变量时不使用var关键字,则变量不会被声明提前。可能看起来会有点绕,让我们来看例子理解一下吧!
      例1:
    <script type="text/javascript">
    	var a;
    	console.log("a = " + a);
    	a = 123;
    </script>
    

    运行结果:
    在这里插入图片描述
    在这个例子中,我先提前定义了一个变量a,但是我并没有给a进行赋值,所以输出的是undefined(a的赋值是在执行代码后面,只有当a的赋值在执行代码前面,a才会输出值,否则都是undefined)。如下:
    例2:

    <script type="text/javascript">
    	var a = 123;
    	console.log("a = " + a);
    </script>
    

    运行结果:
    在这里插入图片描述
    例3:

    <script type="text/javascript">
    	console.log("a = " + a);
    	var a = 123;
    </script>
    

    运行结果:
    在这里插入图片描述
    在这个例子中,为什么同样也是输出undefined呢?因为变量的声明提前,我使用的是var关键字声明的变量,不论我var定义在执行的代码后面还是前面,他都会提前将我定义的变量进行声明,但是不会进行赋值。但是我如果没有使用var关键字进行声明变量呢?让我们继续来看一下:

    例4:

    <script type="text/javascript">
    	console.log("a = " + a);
    	a = 123;
    </script>
    

    运行结果:
    在这里插入图片描述
    我们发现,如果没有使用var关键字进行变量声明时,会报错!

    函数的声明提前

    • 使用函数声明形式创建的函数 function 函数(){},它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数。我们一样通过例子来理解一下:
      例1:
    <script type="text/javascript">
    	fun();
    	function fun(){
    		console.log("这是我的第一个函数");
    	}
    	var fun2 = function(){
    		console.log("这是我的第二个函数");
    	}
    </script>
    

    运行结果:
    在这里插入图片描述
    在这个例子中,我们发现,在函数声明之前我们就先调用了fun()函数,这就是函数的声明提前,所以这种形式的函数位置放在哪里都是一样的,都是先被创建。那么fun2()函数也能如此吗?

    例2:

    <script type="text/javascript">
    	fun2();
    	function fun(){
    		console.log("这是我的第一个函数");
    	}
    	var fun2 = function(){
    		console.log("这是我的第二个函数");
    	}
    </script>
    

    运行结果:
    在这里插入图片描述
    哦吼!报错了,让我们先来检查一下变量fun2

    <script type="text/javascript">
    	console.log(fun2);
    	function fun(){
    		console.log("这是我的第一个函数");
    	}
    	var fun2 = function(){
    		console.log("这是我的第二个函数");
    	}
    </script>
    

    运行结果:
    在这里插入图片描述
    发现没,因为第二个函数是关键字var变量声明的(变量声明提前和函数声明提前是不一样的噢,不要搞混了),所以有声明提前,但是没有赋值,所以输出undefined。但是undefined不是函数,所以一调用就会报错。

    • 总结例2,就是使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用。

    总的来说就是使用函数声明function fun(){} 形式的函数会被提前创建,函数表达式var fun2 = function(){} 创建的函数不会被提前创建,一定要在函数后面调用。

    展开全文
  • 声明提前

    2018-06-30 01:03:51
    之前写代码时常常没有注意这个声明提前,今天有时间就理顺一下声明提前,虽然不常用,但是理顺有助理解别人的代码。声明提前: 1. 变量声明提前使用var关键字声明的变量会在所有代码执行之前,被声明,但是未赋值...

    之前写代码时常常没有注意这个声明提前,今天有时间就理顺一下声明提前,虽然不常用,但是理顺有助理解别人的代码。

    声明提前:

    1.变量声明提前

    (1) 使用var关键字声明的变量会在所有代码执行之前,被声明,但是未赋值

    console.log('a:',a);
    var a = 10;
    console.log('b:',b);
    b = 20;
    console.log(b);
    console.log(window.b);
    console.log(window);

    如上图结果是a的值为undefined, b未定义,变量a的写法等同于下面的写法,

    var a
    console.log('a:',a);
    a = 10;

    (2) 没有使用变量关键字声明的变量等同于直接将值赋给window对象,如:b = 20等同于window.b = 20

    当注释console.log('b:',b),结果如下图

    console.log('a:',a);
    var a = 10;
    //console.log('b:',b);
    b = 20;
    console.log(b);
    console.log(window.b);
    console.log(window);

    b的值被保存到window对象上了,调用b和window.b的值是一样的。

    2.函数声明提前

    (1) 使用函数声明形式( function 函数名(){} )创建的函数,会在所有代码执行之前被创建

    fn();
    function fn(){
        console.log('使用函数声明形式');
    }
    fn2();
    var fn2 = function(){
        console.log('使用var等关键字,函数表达式');
    }

    (2) 使用var等关键字,函数表达式创建的函数,同变量声明提前相似,先声明,但是未赋,结果见上图

    fn2函数的写法等同于下面的代码

    var fn2;
    fn2();
    fn2 = function(){
        console.log('使用var等关键字,函数表达式');
    }

    展开全文
  • 1.具名函数具有声明提前 Date(); //输出:日期函数 function Date() { console.log("日期函数"); } 2.匿名函数和自执行函数不具有声明提前 fun1 // undefined fun1(); // fun1 is not a function var ...

    一、什么是变量声明提前和函数声明提前?

    (1)变量声明提升:声明(只是声明,但不涉及赋值)都被提前到函数
    的顶部,而变量赋值操作留在原来的位置。举例说明:
    在这里插入图片描述

    实际为:
    在这里插入图片描述

    (2)函数声明提升:函数的声明在执行前会被提升到该作用域顶部,所以可以把函数声明放在调用它的语句后面。举例说明:

     	var getName=function(){
            console.log(2);
        }
        function getName(){
            console.log(1);
        }
        getName();
    

    可能有人会觉得最后输出结果为1。我们进一步分析,这个例子中变量声明提前和函数声明提前都有涉及,所以getName也是一个变量。

    所以实际为:

     	var getName;   //变量声明提前
        function getName(){   //函数声明提前到顶部
            console.log(1);
        }
        getName=function(){   //变量赋值依然保留在原来的位置
            console.log(2);
        }
        getName();   //最终输出为2
    

    (3)区别
    将变量声明提升,只会提升变量,⽽不会提升变量所拥有的值。
    将函数声明提升,会把函数声明连同函数内的内容⼀块提升。


    1.具名函数具有声明提前

    	Date();		//输出:日期函数
        function Date() {
            console.log("日期函数");
        }
    

    例:

    	var s=10;
        function test(){
            console.log(s);  //10
            console.log(foo());  //2
            //foo为具名函数,具有提前声明
            function foo(){
                return 2;
            }
        }
        test();
    

    2.匿名函数和自执行函数不具有声明提前

    	fun1  		//	undefined
        fun1();		//	fun1 is  not a function
        var fun1 = function () {
            console.log("匿名函数");
        }
    

    二、例题

    1.

    	var local='window';    //全局变量,默认属于window
        function method(){
            console.log(local); //window
        }
        method();
    
    	var local='window';    //全局变量,默认属于window
        function method(){
            console.log(window);   //window中 local='window'
            
            console.log(local); //undefined[变量声明提前]【作用域问题】
            var local='host';
    		console.log(local); //host
        }
        method();
    

    2.

        x='a';
        console.log(x);
        var fun=function(){
            console.log(x);
            var x='b';
            console.log(x);
        }
        fun();
    

    在这里插入图片描述

    上述代码实际为:

    	x='a';
        console.log(x);
        var fun=function(){
            var x;  //声明提前
            console.log(x);
            x='b';
            console.log(x);
        }
        fun();
    

    3.

    	var a=1;
        function pro(){
            a=11;
            return;
        }
        pro();
        console.log(a);   //11
    
    	var a=1;
        function pro(){
            a=11;
            return;
            function a(){
            }
        }
        pro();
        console.log(a);   //1
    

    function a( ){ } 相当于 var a=function(){}
    即上述代码实际为:

    	var a=1;
        function pro(){
        	var a;
            a=11;
            return;
            var a=function(){
            }
        }
        pro();
        console.log(a);   //1
    

    var a 是 function pro( ) 中的局部变量,而全局变量 var a=1 不受影响。
    输出仍为a=1

    展开全文
  • 函数声明的声明提前

    2017-03-28 15:28:53
    函数声明和函数表达式 定义函数
  • 变量声明提前

    2020-07-01 08:48:43
    //不会报错,循环体没有块级作用域,循环内的变量相当于直接声明在当前代码块的最前面 for(var i=0;i<10;i++){ var temp; //除了第一次为undefined外,其余循环时都会有值(重复声明变量但不赋值并不会覆盖...
  • JS函数声明提前

    2020-11-27 16:13:23
    当JS代码执行时遇见var或function函数时会出现变量声明提前! var声明提前 例1: console.log(a); //undefined var a=10; console.log(a); //10 由于从上往下执行时遇见了var,所以变量声明提前。 var a; //声明提前...
  • 关于js中的声明提前

    2018-04-04 17:59:33
    是从上到下,从左到右,一行一行执行的,但是在这之前还要做一些事情,js程序在正式执行之前,会将所有var 声明的变量和function声明的函数,预读到所在作用域的顶部,但是对var 声明只是将声明提前,赋值仍然保留...
  • 浅析函数声明和函数表达式-函数声明的声明提前_.docx
  • 声明提前(hoisting) 1. 什么是声明提前 声明提前是发生在js引擎”预编译“的时候,是在代码运行之前。当程序开始执行前,会先将var声明的变量和function声明的函数提前到当前 作用域 中创建,赋值留在原地。 传送...
  • 变量声明提前,函数声明提前

    千次阅读 2018-07-01 17:43:43
    1、var声明的变量提到当前script块的头部,赋值留在原位置,如果在赋值之前访问变量,返回undefinedconsole.log('第一次调用:'+sukla) var sukla='sukla' console.log('第二次调用:'+sukla) VM238:1 第一次调用:...
  • 声明提前:无论是变量还是函数的声明提前都是指他们会所有代码块执行之前就进行变量或者函数的声明 2.使用规则 预备知识 window:这里首先了解一下 window 这个东西,在js中window是一个全局对象。 生命周期:...
  • 变量的声明提前

    2018-12-11 20:28:22
    变量的声明提前:  使用var关键字声明的变量,会在所有代码执行之前执行;但是声明变量不用var关键字,则变量不会被声明提前 函数的声明提前:  使用函数声明形式创建的函数 function 函数(){ },它会在所有的...
  • js中函数声明提前

    千次阅读 2018-11-19 14:36:55
    js中函数声明提前 js中普通的变量会声明提前外,函数也会声明提前,不同的是由于函数的声明有两种方法,声明提前的方式也就有两种方式; 1、通过 var fn=function(){}定义函数,只是将函数名提前了,函数体没有...
  • JavaScript声明提前机制会把当前词法作用域中的所有声明放到作用域的顶端。如果是函数内部的声明,那么此变量在函数内部任何地方都是有定义的。 看这段代码  var scope = "global";  function f( ){ ...
  • 变量只提前声明,函数提前声明和函数体,同名变量和函数,函数声明提前 console.log(a)//? a();//? var a =3; function a(){ console.log(10); } console.log(a);//? a = 6; a();//? 结果为: function a(){ ...
  • Javascript 声明提前

    2020-05-03 21:41:22
    Javascript 声明提前 作者:欧日鑫 撰写时间:2020年5月1日 函数定义被提前 在脚本里和函数内部无论在哪个地方定义了函数,其他地方都能够访问。当然,可以举个例子说明。我们定义一个长函数: > result = ...
  • 前端面试题-声明提前

    2019-08-23 11:33:35
    参考文章 面试题:四处分别输出什么?为什么? console.log(a)//? a();//? var a =3; function a(){ console.log(10); } console.log(a);//? a = 6;...//再次声明a,并未修改a的值,忽...
  • js的声明提前

    2021-03-17 15:22:09
    什么是声明提前? 它是指当我们声明一个变量或是一个函数的时候,我们可以在起前面访问带该变量或函数;即:声明统一提前,赋值原地不变 变量声明提前 先来看一下代码: function b(){ console.log(a); //undefined...
  • JS声明提前

    2019-07-11 20:26:23
    JS中的声明提前,变量声明提前,函数声明提前,以及声明提前的顺序 首先来看以下一段代码: console.log(a)//? a();//? var a ; function a(){ console.log(10); } console.log(a);//? a = 6; a();//? 四个输出...
  • 函数声明提取 //变量声明提前 ... //函数声明提前,不止函数名声明提前了,整个函数也被创建好了 fn(); function fn() { console.log('函数声明提前了'); //返回函数声明提前了 } //函数表达式形式的函数
  • 详解:js声明提前

    2021-01-03 21:02:30
    声明提前1.变量声明提前==变量的声明提前 -使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值)﹐ 但是如果声明变量时不适用var关键字,则变量不会被声明提前==2.函数声明提前--(估计你...
  • JavaScript之声明提前

    2018-07-06 13:18:12
    什么叫声明提前在JavaScript中,函数所声明的变量在整个函数体都是有定义的;(包括函数体内嵌套的函数体)这一特性可以形象地理解为声明的变量被提前到函数体顶部,被称作声明提前;需要注意的是,变量的定义并没有...
  • ①var声明提前 概念:变量在声明它们的脚本或函数中都是有定义的,变量声明语句会被提前到脚本或函数的顶部。但是,变量初始化的操作还是在原来var语句的位置执行,在声明语句之前变量的值是u...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 107,750
精华内容 43,100
关键字:

声明提前