知识点讲解
在Javascript提出块级作用域,主要是为了解决Javascript中的一个重要的设计缺陷。
- 变量提升特性导致的大量与直觉不符的代码。
变量提升是什么
(function(){
console.log(a) //undefined
var a=123
})()
js在变量声明提升的时候会将var声明的变量以及用关键字函数声明的函数都会提升到当前作用域的顶端。赋值语句在原地等待赋值。
变量提升的有点事降低程序得把填写难度。
为什么这么说,其实原始的程序在编写的时候是有明确额顺序要求的。
违法直觉的事、
但是这种编写方法就会带来一些问题,毕竟擅自修改了执行的逻辑,主要氛围线面两方面。
内层变量会覆盖外层变量
var tmp = new Date()
function f() {
console.log(tmp)
if (false) {
var tmp = 'hello world';
}
}
f() //undefined
以上程序,全局定义的变量,由于后面的程序定义了同名变量程序,居然凭空消失了。
本应销毁的变量没有被销毁
var s = 'hello'
for (var i = 0; i < s.length; i++) {
console.log(s[i])
}
console.log(i)// 5
面试攻略
谈到块级作用域的影响,多半人会有人闲谈现象,不谈本质。建议重语言缺陷完善的角度分析这个问题。