var、let、const的区别,以及做用范围。

在es5中通常常常使用的变量有两个级别,一个是用var声明的全局级别的变量,另一个是函数级别是用var生命在函数内的。本文中将详细讲解我对es6中的const和let的区别。es6

let的使用以及做用范围

let是块级变量,只有在本身声明的内部才会有做用。函数

'use strict';
{
    var a = 12;
    let b = 15;
    {
        console.log(a, b)//12 15没有问题的。
    }
}
console.log(a,b)  //12  defined     a是全局变量在哪里输出都没有问题,然而b是块级变量因此只有在声明b的内部才会有效。

 let的提高。下列代码中证实了let没有被提高 var 被提高了。es5

'use strict';
function fun() {
    // var a   至关于a提高到了这里定义了,可是未赋值。
    console.log(a, b); //undefined defined  注意a是没有被赋值,而b是未定义,这说明a是向上提高了而b却没有提高。
    // a = 12; a至关于在这里赋值了、
    var a =  12;
    let b = 'b';
}
fun();

let的提高以及做用范围。spa

'use strict';
var a = 12;
function f() {
    console.log(a); //defined  由于在函数外部声明了a,而后在函数内部又声明了a,此时函数外部的a就会失效,可是函数内部的a又没有提高的功能因此会输出未定义;
    let a = 100; 
}
f();

使用let代替匿名函数当即执行code

'use strict';
(function () {
    var config = [];
    config.push(1);
    config.push(2);
    config.push(3);
    console.log(config) //1, 2, 3
})();
let configs;
{
    configs = [];
    configs.push(4);
    configs.push(5);
    configs.push(6);
    console.log(configs) //4, 5, 6
}

const的使用

const是常数顾名思义,就是声明后没法修改的。请看下面的例子。对象

const的提高和做用范围和let几乎同样,在这里就不作过多的例了。blog

'use strict';
const a = {
    name: '铅笔'
};
a = 100; //此时会报错

常量不表明因此得东西不能修改,除了a = 这个指向不能修改 a对象内部的属性和值都是能够修改的。io

'use strict';
const a = {
    name: '铅笔'
};
a.name = '黑白';
a.email = '48988840@qq.com';
console.log(a); // {name : '黑白, email : '48988840@qq.com'}

怎么让a和内部的东西不能修改呢?console

'use strict';
const a = {
    name: '铅笔'
};
Object.freeze(a);  //a内部的全部属性和值都不能修改了。
a.name = '黑白';   // 报错
a.email = '48988840@qq.com'; // 报错
console.log(a); // {name : '黑白, email : '48988840@qq.com'}
相关文章
相关标签/搜索