先看一段代码:
var name = 'Tom';
function say() {
if (name == undefined) {
var name = 'Jack'
console.log('goodbey ' + name)
} else {
console.log('hi' + name)
}
}
say() //输出 goodbye Jack
var name = 'Tom';
function say() {
if (name == undefined) {
name = 'Jack'
console.log('goodbey ' + name)
} else {
console.log('hi ' + name)
}
}
say() //输出 hi Tom
从上面代码中,我们看出var a在函数中变量提升了,而a没有,以下做出更详细的总结:
var a :可以定义全局或者局部变量,a会变量提升;
a: 文档流执行a的赋值,a便成为全局变量,不存在变量提升。实际是定义了全局对象(window)的属性,可用delete删除。
注意点:
- 只有var定义,变量才会有变量提升。
- var a和a在浏览器环境下都是在window上定义a属性。
- for循环和if判断中var a,a会冒泡,只有在函数{}内var才不会冒泡。