变量的声明提升
例子如下
var value = 'czzz2.com'
function show() {
console.log(value)
if (!value) {
var value = 'czz'
}
console.log(value)
}
show()
上述代码等同于如下代码
var value = 'czzz2.com'
function show() {
var value
console.log(value)
if (!value) {
value = 'czz'
}
console.log(value)
}
show()
函数的声明提升
记住一个要点,变量的声明提升在函数的声明提升后面。
例子如下
getName()
var getName = function () { //变量提升=》 声明getName,var getName;getName=...
console.log('czz')
}
function getName() { //提升到最上面
console.log('czzz2.com')
}
getName()
代码可以转化称如下
function getName() {
console.log('czzz2.com')
}
//var getName //重复声明=》无效
getName()
getName = function () {
console.log('czz')
}
getName()
//输出结果,czzz2.com czz
Demo3:
var a = 99; // 全局变量a
f(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。
console.log(a); // a=>99, 此时是全局变量的a
function f() {
console.log(a); // 当前的a变量是下面变量a声明提升后,默认值undefined
var a = 10;
console.log(a); // a => 10
}
// 输出结果:undefined 10 99
Demo4:
function test1() {
a = 5;
console.log(a);
console.log(window.a);
var a = 10;
console.log(a);
}
test1();
// 输出结果:5 undefined 10