标签:tmp 知识点 变量 ES6 作用域 详解 let 字符串 补全
一、不存在变量提升
let不像var那样会发生‘变量提升’现象,所以,变量一定要在声明之后使用,否则报错
console.log(a); //输出undefined
console.log(b); //报错ReferenceError
var a = 1;
let b = 1;
二、会产生暂时性死区
只有块级作用域内存在let命令,它所声明的变量就‘绑定’这个区域,不再受外部的影响
var tmp =123;
if(true) {
tmp = 'abc'; //ReferenceError
let tmp;
}
这段代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量之前对tmp赋值会报错
ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域,凡是在声明前就使用这些变量就会报错
综上可得,在代码块内,使用let命令声明变量之前,该变量都是不可用的,这在语法上,成为‘暂时性死区’
三、不允许重复声明
1、let不允许在相同作用域内,重复声明同一个变量
四、块级作用域存在的价值
ES5只有全局作用域和函数作用域,没有块级作用域,会出现以下问题:
1、内层变量可能会覆盖外层变量
var tmp = new Date();
funnction f() {
console.log(tmp);
if(false){
var tmp = 'Hello world';
}
}
f(); // undefined
这段代码输出结果为undefined, 原因在于变量提升,导致内层的tmp变量覆盖了外层的tmp变量
2、 用来计数的循环变量泄露为全局变量
五、 字符串扩展
JavaScript只有indexOf方法
ES6又提供了三种方法
1. includes(); 返回布尔值,表示是否找到了参数字符串
2. startsWith(); 返回布尔值,表示参数字符串是否在源字符串的头部
3. endsWith(); 返回布尔值,表示参数字符串是否在源字符串的尾部
其中这三个方法都支持第二个参数,表示开始搜索的位置
使用第二个参数n时,endWith的行为与其他两个方法有所不同,它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。
4、repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次
5、padStart(), padEnd()
ES7推出字符串补全长度的功能,如果某个字符串不够指定长度,会在头部或者尾部补全。
padStart用于头部补全,padEnd用于尾部补全
'ycc'.padStart(5,'LL') //'LLycc'
'ycc'.padEnd(5,'LL') //yccLL
其中第一个参数指定字符串的最小长度,第二个参数用来补全的字符串
1、如果原字符的长度等于或大于指定的最小长度,则返回原字符
2、如果用来补全的字符串与源字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。
3、如果省略第二个参数,则会用空格补全长度
六、模板字符串(反引号)
标签:tmp,知识点,变量,ES6,作用域,详解,let,字符串,补全 来源: https://blog.csdn.net/yechongchong/article/details/118396948
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。