js有声明前置,函数和变量的声明都会前置,即会在整个js代码的最开始,不管声明部分在什么位置。
js中函数的声明优先于同名变量的声明,不管先后顺序如何。
函数的声明会在整段js代码的最前面,不管function() 函数在js的什么位置。
当先声明了名为copy()的函数,再声明名为var copy的变量时,变量名会覆盖函数,使得在同名变量定义之后,函数变得未定义,即同名变量定义之后 调用同名函数会报错,即 copy is not a function
这里由于代码中了函数名后面的()导致编译器识别为定义了与函数copy同名的变量,覆盖了前面的声明。故报错:copy is not a function.