JavaScript声明变量解析

在开发中我们会用到各种各样的前端框架,比如Vue.js,Angular.js和React.js等,这些框架给我们开发人员带来了极大的便利,在使用这些框架过程中,我们会经常声明一些变量进行使用,因此掌握不同关键字声明变量的特性,对我们来说显得至关重要,由于这些框架底层封装的都是JS的原生代码,深入理解JS声明变量的关键字var,function,let,const,export,import,class等的差别,成为我们使用这些框架的基础,下面将对这些关键字进行简单的解析。

目录

  1. var和function
  2. let和const
  3. export和import
  4. class

一、var和function

关键字var和function既可以声明全区变量(变量直接声明在标签<script></script>内部),又可以声明局部变量(变量声明在标签<script></script>子代码块内),不同的是var用来声明变量,function用来声明函数(个人理解函数是特殊的变量)

关键字function
<script>
    //方法methodA为全局函数,可以在任何位置调用
    function methodA(){
        alert("A");
        //方法methodB为局部函数,只能在方法methodA代码块内调用
        function methodB(){
			alert("B")
		}
        methodB();//调用方法methodB
	}
    methodA();//调用方法methodA 
</script>

关键字var
<script>
    //变量num为全局变量,可以在任何位置调用
    var num = 1;
    alert(num);//1
    function methodA(){
        //变量num2为局部变量,只能在方法methodA的局部代码块内调用
        var num2 = 2;
        alert(num);//1
        alert(num2);//2
    }
    methodA();
</script>

二、let和const

let和const关键字声明的变量没有变量提升特性(只有变量声明后才可以调用);let声明的变量具有区域隔离性,即let声明的变量在各自代码块内赋的值,只有在该代码块内有效,不同代码块相互独立,如果在该代码块内没有没赋值,则取上一级代码块的值作为该代码块的值;const关键字声明的变量除了具有局域隔离性外,其还具有只读性,即被声明赋值后,不可更改只能读取,如果赋值的为对象(值为对象的地址值),可对其对象的属性进行更改。

关键字let
<script>
    //在该代码块内获取变量num值,只能获取该代码块赋予的值1
    let num = 1;
    alert(num);
    function methodA(){
        /**
        * 在方法methodA代码块内获取变量num的值,如果该代码
        * 块赋予了新值,则取新值2,如果没有赋予新值,则取上
        * 一级代码块的值1
        */
		num= 2;
		alert(num);
	}
    methodA();
    //此处获取变量num的值仍然是1
    alert(num);
</script>

关键字const
<script>
    //变量只能够赋值一次,作用范围同let
    const num = 1;
    alert(num);
    function methodA(){
        //变量num2只能在方法methodA代码块内获取
        const num2 = 2;
        alert(num2);//2
		alert(num);//1
	}
    methodA();
    alert(num);//1
</script>

三、export和import

在实际开发中,我们经常遇到一个js模块要用到另一个js模块声明的变量,针对这种情况ES6语法给我们定义了关键字export,export default和import来实现,export(在模块中可以多次使用)和export default(在模块中只可以使用一次)都是用来修饰变量,将变量提升为模块级别;如果我们需要在其他模块使用该模块的变量,可以使用关键字import引入。

export.js文件
<script>
    //export可以多次使用,将多个变量提升为模块级别
    export const num = 1;
    export const num2 = 2;
	//export default在一个js模块中只能使用一次
    export default const name = '齐天大圣';
</script>


import.js文件
<script>
    /**
    * import引入export default修饰的变量不需要加大括号,
    * 而引入export修饰的变量需要输入具体的变量名,也可以
    * 用as对变脸进行重新命名
    */
    import name, {num as n, num2 as n2} from export.js
    alert(n);//此处会直接弹出export.js声明的变量num值1
    alert(n2);//此处会弹出export.js声明的变量num2值2
    alert(name);//此处会弹出export.js声明的变量'齐天大圣'
</script>

四、class

在最新的ES6语法中为了更接近传统语言的写法,引入了类关键字class作为对象模板,给前端开发人员更加清晰的结构变量结构

<script>
    //定义一个普通的类,在中可以声明方法
    class People{
        constructor(name){
            this.name = name;
        }
        toString(){
            return 'hello JS'
        }
    }
    var p = new People('小明')
    alert(p.name);//小明
    alert(p.toString());//hello JS
    //获取对象p的数据类型,发现对象的本质仍然是function声明的函数
    alert(typeof p);//function


    /**
    * 类也可以继承,规则类似于java语法
    */
    class Student extends People{
        constructor(name,age){
            super(name);
            this.age = age;
        }
    }
    var s = new Student('小王',20);
    alert(s.name);//小王
    alert(s.age);//20
    alert(s.toString());//hello JS
</script>

总的来说,js中用来声明变量的只有关键字var,function和class,而let,const,export,export default和import只是用来修饰声明的变量,用来修饰变量的局域性和是否可重新进行赋值等特性。

发布了12 篇原创文章 · 获赞 0 · 访问量 3993

猜你喜欢

转载自blog.csdn.net/Peppa_Pig_0325/article/details/86100238