• es6中的变量声明


    es6中的变量声明

    变量的声明

    for (var  i  =  0; i  <  5; i++) {
    	console.log(i)
    }
    

    var声明

    作用域问题

    上面的就是一个简单的for循环语句,在每次循环变量i的时候答应当前i的值.但是在上面的代码基础上加入几行,我们再试试看。

    for (var  i  =  0; i  <  5; i++) {
    	console.log(i)//0,1,2,3,4
    }
    console.log(i)//5
    console.log(window.i)//5
    

    你会发现变量i的值还是会被答应出来,更加过分的是在全局变量window上面竟然也可以拿到变量i的值,这很显然是不严谨的,也不是我们想要的,于是es6就对变量声明有了下面的修改。

    重复声明问题

    看下面的代码:

    var a=1;
    var a=2;
    

    这样声明的变量不会报错,es5中会解析成下面的代码:

    var a;
    a=1;
    a=2;
    

    let声明

    作用域问题

    在es5中我们使用let关键字来声明变量。还是同样的代码,我们看看有什么不一样的效果:

    for (let  i  =  0; i  <  5; i++) {
    	console.log(i)//0,1,2,3,4
    }
    console.log(i)//i is not defined
    console.log(window.i)//undefined
    

    你会发现在for循环内部我们依然可以拿到每次的打印结果,这是正确的,也是我们所期望的,但是。在循环体之外就不能获取到变量i了,提示错误为未定义,全局变量上也不能获取i的值。这是因为在es6中引入了模块的概念,我们可以认为整个for循环是一个模块,在模块内部声明的变量只能在模块里面用。你也可以认为es6隐式的帮我们在for循环之外加入一个自执行函数:

    (function () {
    	for (var  i  =  0; i  <  5; i++) {
    		console.log(i)//0,1,2,3,4
    	}
    }
    )()
    console.log(i)//i is not defined
    

    这样变量就不是声明在全局,也就不会被全局污染了。

    重复声明问题
    let a=1;
    let a=2;
    

    但是在es6中上面说到的作用域问题,所以es6中并不会存在变量提升的问题,也就是说你相当于重复声明了变量a,所以会报错。‘'a' has already been declared’

    const声明

    const 引入了常量的概念,常量一般为固定的值是不能修改的,提示常量不能被修改(Assignment to constant variable.)

    const a=1;
    a=2;
    

    但是const不能修改的是这个值的引用空间,如果代码这样写,就不会报错:

    const  a  = { name:  'hello', age:  0 };
    a.age  =  1;
    console.log(a)//{ name: 'hello', age: 1 }
    
  • 相关阅读:
    选择屏幕加功能码
    alv 列标题
    指针引用的学习
    CM3中数据传输对齐/非对齐方式
    perl学习笔记之:模式匹配,模块,文档
    PERL学习之模式匹配
    perl:split函数用法
    perl:_DATA_ _LINE_ _FILE_
    CVS update常用技巧
    cvs 文件无法上传debug
  • 原文地址:https://www.cnblogs.com/hanqingtao/p/9884522.html
Copyright © 2020-2023  润新知