美文网首页
01- let 变量 与 const 常量

01- let 变量 与 const 常量

作者: 夏海峰 | 来源:发表于2018-08-21 14:39 被阅读13次

1、let 变量

let 声明的变量只在它所在的代码块内有效。ES5 只有两种声明变量的方法:var 命令和 function 命令。ES6 除了添加 let 和 const 命令,另外两种声明变量的方法:import 命令和 class 命令。所以,ES6 一共有 6 种声明变量的方法

{
    var a = 10;
    let b = 20;
    const c = 30;
}
console.log(a);  // 10

console.log(b);  // b is undefined

console.log(c);  // c is undefined

for(let i =0; i<10; i++) {
    //
}
console.log(i);   // i is undefined


var a = [];
for(var i = 0; i<10; i++) {
    a[i] = function() {
        console.log(i);
    }
}
a[6]();   // 10

2、var 变量与变量提升

使用 var 声明的变量,存在变量提升。

var tmp = new Date();

function f() {
    console.log(tmp);
    if (false) {
        // var tmp 变量提升
        var tmp = 'hello world';
    }
}

// 上面 f 函数等价于 f1函数
function f1() {
    var tmp;
    console.log(tmp);
    if(false) {
        tmp = 'hello world';
    }
}

f();   // undefined
f1();  // undefined


for(var i=0; i<10; i++) {
    // ....
}
console.log(i);  // i 是一个全局变量,即 var 变量提升

3、const 常量

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心

const PI = 3.14;
// PI = 4;   报错

const OBJ = {};
OBJ.name = 'geek';   // 不报错
console.log(OBJ);

// 冻结对象
const foo = Object.freeze({});  // foo被冻结,将无法再被改变
foo.name = 'geek';  // 该行代码不起作用、或者会报错
console.log(foo);

功能封装:冻结一个对象及其所有后代中的对象属性。

var constantize = (obj) => {
    Object.freeze(obj);
    Object.keys(obj).forEach((key,i)=>{
        if (typeof obj[key] === 'object') {
            // 递归 冻结
            constantize(obj[key]);
        }
    });
}

完!!!

相关文章

  • ES6_var、let与const

    var,let 与 const var 申明变量。 let 申明变量,更完美的 var。 const 申明常量(物...

  • ES6常用及关键特性

    1、变量声明 let 和 const 其中let表示变量,const表示常量,const声明的变量被认为是常量,也...

  • Android菜鸟学习js笔记 一

    一、var,const,let区别? var 变量,const 常量,let块级变量。

  • 01- let 变量 与 const 常量

    1、let 变量 let 声明的变量只在它所在的代码块内有效。ES5 只有两种声明变量的方法:var 命令和 fu...

  • ES6

    let const let const 没有变量提升let 块级作用域const 常量 模板语言, restfu

  • es6

    1.let(变量) 与 const(常量) 声明 变量和常量 var let 的使用: (1)作用域只局限于当...

  • 2018-09-04

    js变量和常量 JS中与变量常量声明相关的关键字有var、let以及const,其中let和const是ES6的新...

  • 工作中常用的ES6语法

    1. let和const let(变量)不会重复声明变量-可以修改块级作用域 const(常量)不会重复声明常量-...

  • 关于ES6以及ES6常用的方法

    1、变量声明let和const let表示变量、const表示常量。let和const都是块级作用域。 2、模板字...

  • ES6这些就够了

    1.变量声明const和let let表示变量、const表示常量。let和const都是块级作用域 2.模板字符...

网友评论

      本文标题:01- let 变量 与 const 常量

      本文链接:https://www.haomeiwen.com/subject/jdxjiftx.html