JS变量提升
变量的声明提升到程序顶部
console.log(a);
var a = 2;
var a
console.log(a)
a = 2
函数提升高于变量提升
foo();
function foo() {
console.log('foo');
}
var foo = 2;
var foo
function foo() {
console.log('foo');
}
foo()
foo = 2
var foo = function() {
console.log(1);
}
function foo() {
console.log(2);
}
foo()
var foo
function foo() {
console.log(2);
}
foo = function() {
console.log(1);
}
foo()
var、let和const的区别
- var存在变量提升
- let和const不存在变量提升
- let为块级作用域变量,可以改变;const为常量,不可以改变
- var是允许在相同作用域内重复声明同一个变量的,而let与const不允许这一现象。
例题
function Foo() {
getName = function () {
console.log(1);
};
return this;
}
Foo.getName = function () {
console.log(2);
};
Foo.prototype.getName = function () {
console.log(3);
};
var getName = function () {
console.log(4);
};
function getName() {
console.log(5);
}
Foo.getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();