变量和变量的重名
变量的重名会导致覆盖
原因:
如果在预编译阶段出现了相同的名字,那么后出现的声明就会覆盖前一个声明
函数和函数的重名
函数的重名也是覆盖,
因为函数声明提升包括赋值操作,所以在中间执行函数,也是第二个值。
原因:
如果在预编译阶段出现了相同的函数名字,那么后出现的声明就会覆盖前一个声明,函数声明提升也包括赋值操作。
函数和变量的重名
变量的声明会覆盖函数的声明
原因
函数声明和变量声明的优先级不同,函数声明会被提升到更早的位置,函数的提升包括赋值操作,变量声明提升不包括赋值操作,所以输出的值是变量的值
因为函数的提升包括赋值操作,所以test()输出的是test1
不同script标签的函数重名
不同script标签的函数提升是不同的,所以test输出test1