对于C#人来说,我们都是习惯了在需要的时候定义变量,总是以为变量会在使用完成后自动的就清理了内存,不会造成变量污染。可是js的var 变量都是函数级别的,不是使用{}引起来就好了,所以有时候会造成变量污染错误。幸好es6推出了let,const也变成块作用域了。不过我不清楚为什么还保留着var,可能是为了兼容历史版本吧。知识点撸起,欧拉。
1、let:块级可变作用域关键词。
/*****
* 测试作用域类,直接使用export进入导出
*/
class TestsScope{
testLet(){
let name = "亲";
console.log(name);
{
//块作用域,超出{} 将不可使用
let name1 = "您好";
console.log(name1);
}
console.log(name1);//超出作用域,将报Uncaught ReferenceError: name1 is not defined 错误
}
}
调用html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let</title>
</head>
<body>
<script src="TestsScope.js"></script>
<script>
let testScope = new TestsScope();
testScope.testLet();
</script>
</body>
</html>
结果:
2、const:块级常量作用域关键词。const字面量的变量如果是基本类型,则值不可以再修改;如果是object类型,则不可以重新给予赋值,但是可以修改其内容结构的子项值。
/*****
* 测试作用域类,直接使用export进入导出
*/
class TestsScope{
testLet(){
let name = "亲";
console.log(name);
{
//块作用域,超出{} 将不可使用
let name1 = "您好";
console.log(name1);
}
console.log(name1);//超出作用域,将报Uncaught ReferenceError: name1 is not defined 错误
}
testConst(){
//const 变量对于基本类型数据是不可以再修改的
const name = "亲";
console.log(name);
//语法错误,变量值不可再修改
// name = "爱";
const obj = new Array();
console.log(obj);
//变量为object类型的,可以修改内部的数据
obj.push("sdf");
console.log(obj);
obj[0] = "change";
console.log(obj);
//语法错误,obj类型不可以修改
obj=[];
}
}
3、var:此修饰符的变量仍然是function级别的,撸起验证。
/*****
* 测试作用域类,直接使用export进入导出
*/
class TestsScope{
testLet(){
let name = "亲";
console.log(name);
{
//块作用域,超出{} 将不可使用
let name1 = "您好";
console.log(name1);
}
console.log(name1);//超出作用域,将报Uncaught ReferenceError: name1 is not defined 错误
}
testConst(){
//const 变量对于基本类型数据是不可以再修改的
const name = "亲";
console.log(name);
//语法错误,变量值不可再修改
// name = "爱";
const obj = new Array();
console.log(obj);
//变量为object类型的,可以修改内部的数据
obj.push("sdf");
console.log(obj);
obj[0] = "change";
console.log(obj);
//语法错误,obj类型不可以修改
// obj=[];
}
/**
* 测试var
*/
testVar(){
{
var name = "亲";
{
var name1="爱";
}
}
//不会报错,会打印出 亲
console.log(name);
//不会报错,会打印出 爱
console.log(name1);
}
}
4、字符串模板:我们没有这个语法糖的时候,拼一大串字符串时候,总是得非常小心翼翼的进行+++,真的一不小心就错了。在C#中早就实现了字符串模板,真的是方便。
撸起
/*****
* 测试作用域类,直接使用export进入导出
*/
class TestsScope{
testLet(){
let name = "亲";
console.log(name);
{
//块作用域,超出{} 将不可使用
let name1 = "您好";
console.log(name1);
}
console.log(name1);//超出作用域,将报Uncaught ReferenceError: name1 is not defined 错误
}
testConst(){
//const 变量对于基本类型数据是不可以再修改的
const name = "亲";
console.log(name);
//语法错误,变量值不可再修改
// name = "爱";
const obj = new Array();
console.log(obj);
//变量为object类型的,可以修改内部的数据
obj.push("sdf");
console.log(obj);
obj[0] = "change";
console.log(obj);
//语法错误,obj类型不可以修改
// obj=[];
}
/**
* 测试var
*/
testVar(){
{
var name = "亲";
{
var name1="爱";
}
}
//不会报错,会打印出 亲
console.log(name);
//不会报错,会打印出 爱
console.log(name1);
}
/***
* 测试字符串模板变量
*/
testStringTemplate(){
let money = 100000000;
let dear = "亲爱的";
let name = "爱钱的大傻憨"
let str = `${dear}${name},期待你的年终奖是${money}元`;
//不会报错,会打印出 爱
console.log(str);
}
}
结果
好啦,此篇章到此结束,知识点比较简单,但是非常重要,因为天天在使用。完成一篇写作是非常开心的事情。