var及ES6中let ,const个人理解

let 取代 var。ES6新增加了两个新的变量声明关键字 let 和 const,而其中的 let完全可以取代 var,两者语义相同且 let 更适合作为块级作用域关键字

example:

1.//  var 

console.log(str);                    // undefined
if (true) {
    var str = 'ES6';
}
console.log(str);                    // 'ES6'
// 这里的 str实际相当于声明了一个模块内的全局变量,只要是当前模块内就都可以访问。就像上面 console.log,虽然显示的是 undefined,但也只是相当于说未初始化,而不是未定义(Uncaught ReferenceError: a is not defined)。
    //  这违反了 变量先声明后使用的原则!!!!!
 
for (var i = 0; i < 10; i++) {
    console.log(i);
}
console.log(i);                    // 10    这里的 i跟上面的 str一样,声明变量的时候被提升了到了模块的最顶部


2.// let
if (true) {
    console.log(strs);                // Uncaught ReferenceError: Cannot access 'strs' before initialization
    let strs = 'ES6';
}
console.log(strs);                    // Uncaught ReferenceError: strs is not defined
// var关键字带有变量作用域提升作用,而 let关键字则不存在这个问题,变量作用域被限制的死死的。

for (let i = 0; i < 10; i++) {
    console.log(i);
}
console.log(i);                    // Uncaught ReferenceError: i is not defined

3、全局常量。在定义全局常量时应优先使用 const关键字,而不是在模块的最顶部采用let或var 声明变量充做全局常量。尤其是在全局环境中只应设置常量,而不应声明变量以充常量。
// const 优于 let、var有以下几个原因:
// 一、const可以提醒代码阅读者,该参数是一个常量,不能随意修改,修改该参数存在一定的风险;
// 二、const比较符合函数式编程思想,运算不改变值,只是新建值,而且有利于将来的分布式运算;
// 三、JS编译器会对 const进行优化,有利于提高代码的执行效率,所以可以多用 const。而且 let和 const的本质区别就是编译器内部的处理不同。
    const a = 1, b = 2, c = 3,d = 4;

// 所有的函数都应该设置为常量
const TempFunc = function () {
    console.log('所有的函数都应该设置为常量!');
};
对象 1.单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾。
example:
const a = {aa: 123, bb: '123'};
const b = {
    bb: 234,
    cc: '234',
};
2.对象尽量静态化,一旦定义,就不得随意添加新的属性。如果实在需要添加新属性,可以使用 Object.assign方法追加。如果对象的属性名是动态的,可以在创造对象的时候,使用属性表达式定义。
const a = {aa: 123};
a.aa = 1234;
console.log(a);                    // {aa: 1234}

// 如果必须要添加属性
Object.assign(a, {bb: '123'});
console.log(a);                    // {aa: 1234, bb: "123"}


猜你喜欢

转载自www.cnblogs.com/lihemengbky/p/12605096.html
今日推荐