javascript的同名函数和同名变量提升
- 个人认为是
变量声明
更加优先其次是函数声明
。
console.log(a) // 函数
var a = 1;
console.log(a) //变量 1
function a() {
}
console.log(a) //变量 1
- 可以写成
var a; // 变量提升
function a () {} // 函数提升
console.log(a); // 输出函数
a = 1; // 赋值位置不会变
console.log(a); // 输出1
// 这里的函数声明已经提前
console.log(a); // 继续输出1
- 第二个例子:
function b(){
a = 10;
return;
function a(){ //函数声明置顶
console.log(a);
}
}
var a;
a = 1;
b();
console.log(a); // 输入1
- 解释:
var a;
function b () {
function a () {console.log(a)};
a = 10; // 重新赋值替掉a函数
return;
}
a = 1;
b();
console.log(a); // 这里拿的是全局变量的a也就是1
- 第三个例子:
var c = 1;
function d() {
console.log(c);// 输出undefined
var c = 2;
}
d();
- 解释
var c;
function d () {
var c;
console.log(c); // 输出undefined
c = 2;
}
d();
- 最后一题,有点难:
var c = 1;
function d(c) {
console.log(c);
var c = 2;
}
d(3); // 3
console.log(c); // 1
- 解释:
var c; // 全局
function d (c) {
//c形参可以看作: var c = 实参
var c; // 形参
var c; // 下面的c = 2的变量
c = 3 // 实参
console.log(c); // 3
c = 2
}
c = 1; // 全局
d(3);
console.log(c); // 1
同名的变量提升的优先级比同名的函数更高
- 变量作用域
就近原则
,内部能获取的就用内部,内部没有找外部。
每天一个秃头小技巧 —— coderNoob