javascript函数声明和函数表达式,重载

函数声明中,一般类型变量跟函数重名情况

var fn = 1;
function fn() {
    return 1;
}
console.log(fn);    // 显示的是fn的值1
function fn() {
    return 1;
}
var fn = 1;
console.log(fn);    // 显示的是fn的值1,跟定义顺序无关
var fn;
function fn() {
    return 1;
}
console.log(fn);    // 显示的是fn函数

函数表达式中,一般类型变量跟函数重名情况

var fn;
var fn = function() {
    return 1;
}
console.log(fn);    // 显示的是fn函数
var fn = 2;
var fn = function() {
    return 1;
}
console.log(fn);    // 显示的是fn函数
var fn = function() {
    return 1;
}
var fn = 2;
console.log(fn);    // 显示的是fn的值
var fn = function() {
    return 1;
}
var fn;
console.log(fn);    // 显示的是fn函数

结论:

  • 如果变量声明给与赋值,变量优先于函数声明提升
  • 如果变量声明未赋值,函数声明优先于变量提升
  • 如果变量声明给与赋值,变量按照先后顺序生效,后面覆盖前面
  • 如果变量声明未赋值,函数表达式生效

你可能感兴趣的:(javascript)