zoukankan      html  css  js  c++  java
  • 变量提升和函数提升,创建同名变量,同名函数,同名表达式的情况,全局变量和局部变量重名

    一.定义和声明

    1.对于变量来说,定义就是声明。

           例如:int  a  ;

           我们可以说它是定义也可以说是声明

    2.对于函数来说,声明和定义完全不是一回事

            void sum(int a,int b);  --函数的声明

            void sum(int a,int b){ }; --函数的定义

    二.重复声明同一个变量

    var a = 1;
    var a = 2;
    console.log(a); // 2
    var a = 1;
    var a;
    console.log(a); //1
      从变量提升的角度去理解,上面的代码经过变量提升就可以改写成下面这样,因为变量提升只提升声明不提升赋值
    var a;
    var a;
    a = 1;
    console.log(a);

      参考《JavaScript高级程序设计》第7.3章节,原话如下

       JavaScript从来不会告诉你是否多次声明了同一个变量;遇到这种情况,它只会对后续的声明视而不见(不过,它会执行后续声明中的变量初始化)。

    三.有俩个同名方法

    function foo() {
        console.log('foo1');
    }
    foo();  // foo2
    function foo() {
        console.log('foo2');
    }
    foo(); // foo2

          在js里同时有两个相同的函数方法时,在调用该方法时并不好报错,会默认调用最后一个同名方法(涉及到函数提升)

    四.两个同名的函数表达式

    var foo = function () {
        console.log('foo1');
    }
    foo();  // foo1
    var foo = function () {
        console.log('foo2');
    }
    foo(); // foo2
      函数表达式则不会有提升(此处实质为变量提升)

    五.变量提升和函数提升

    1.变量提升

           在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。全局变量提升到全局作用域的最开始,函数中的局部变量则提升到函数的最开始。

         (注意:函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!)

    2.函数提升

           js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!  例子可对比上面第三点和第四点。

    六.全局变量和局部变量重名

     1.定义全局变量和局部变量,变量名都是age。在函数内部不对局部变量age赋值

    var age = 250;//定义一个全局变量age,赋值为250
    function testf(){
        console.log("testf:age="+age);//age是局部变量,因为有变量声明提升,所以age是undefined;
        var age;//定了一个局部变量age,没有赋值。
    }

    2.定义全局变量和局部变量,变量名都是age。在函数内部对局部变量age赋值

    var age = 250;//定义一个全局变量age,赋值为250
    function testf(){
        console.log("testf:age="+age);//age是局部变量,因为有变量声明提升,所以age是undefined;
        var age=300;//定了一个局部变量age,并赋值为300。
        console.log("testf:age="+age);//300
    }
  • 相关阅读:
    H5开发推荐使用Q.js,轻量的前端单页路由框架
    微信公众号分享接口
    ios浏览器 图片size过大(长度6000px) 设置translateZ(0)/translate3d(0,0,0),会模糊
    Android Studio创建项目
    unity 旋转两种方法
    Unity3D 物体移动方法总结
    unity3d 各键值对应代码
    MonoBehaviour简述
    unity之Rigidbody属性
    Unity UGUI实现分段式血条
  • 原文地址:https://www.cnblogs.com/zhoujingguoguo/p/10192336.html
Copyright © 2011-2022 走看看