以往版本的JS中,如果你在if中定义一个变量,这个变量在if外部也是可以访问的,而不管if条件是否被执行,如:

if(false){

    var x = "hello JShaman"

}

console.log(x);

执行这段代码不会失败、不会报错,但会输出undefined:

这情况很可能会引起bug,而且很难找出原因。

在ES6(即:ES2015)中,为了解决这个隐患,引入了let关键字。Let定义的变量,只在自身所在的作用域生效果。修改上述代码如下:

if(false){

    let x = "hello JShaman"

}

console.log(x);

执行,即会报错:

而且,let还可以广泛的应用在for循环中,如:

for(let i=0; i<10; i++){

    console.log("JS代码混淆,就用JShaman代码混淆加密平台");

}

console.log(i);

这时执行同样会报错:i未定义。

ES6还新增了一个const关键字,用于定义常量:

const x = "JShaman:JS代码混淆加密平台";

x = "hello jshaman";

执行将会出错,因为试图改变一个常量的值 。

但并不意味着赋值是恒定不变的,用例子来说明:

const x = {};

x.name = "JShaman";

console.log(x);

这个执行是没有问题的:

但如果这样操作是不行的:

const x = {};

x = "JShaman";

执行会出错:

小提示:实际使用时,用const定义三方模块是非常适合的。