函数声明提升大于变量提升
function a() {}
var a;
console.log(a);
函数声明提升大于变量提升; 但如果变量被赋值, 会覆盖函数声明
var b = 1;
function b() {}
console.log(b);
(function c() {})();
console.log(c);
var d = function e() {};
console.log(e);
函数内部用var定义了和外部同名变量,函数将不再向上找外部的变量
var f = 10;
(function f() {
console.log(f);
var f = 100;
console.log(f);
})();
console.log(f);
函数参数对象和内部都没有声明该变量,函数将向上去外部找这个变量
(function g() {
console.log(g); // function g() { console.log(g) }
})();
var h = function i() {
console.log(i); // function i() {console.log(h)}
};
h();
函数内部声明的变量属于函数内部作用域, 不会影响其外部的同名对象
var j = 10;
function k() {
var j = 100;
console.log(j);
}
k();
console.log(j);
var l = 10;
function m() {
l = 100;
console.log(l);
}
m();
console.log(l);
var obj = { q: 10};
(function r() {
console.log(obj);
var obj = {s: 100};
console.log(obj);
})();
console.log(obj);
var obj = { t: 10};
(function u() {
console.log(obj);
obj1.t = 100;
console.log(obj);
})();
console.log(obj);