以往版本的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定义三方模块是非常适合的。