1. 函数提升优先于变量提升
var c = 1;
function c(c){
console.log(c);
var c = 3;
}
c(2) // 报错
// 函数提升优先于变量提升,先函数提升了,然后变量c提升,
// 所以把函数c覆盖了,这个c就不是函数了,所以报错
改写成下面这样就能看懂了
var c
function c(c){
console.log(c)
}
c = 1
c(2)
2. 作用域
作用域是静态的,在函数创建时就已经固定了,和函数的调用方式无关
var x = 10;
function fn(){
console.log(x);
}
function show(f){
var x = 20;
f();
}
show(fn); // 输出为10