来源:JS的函数定义方式以及对声明的提前以下代码,声明语句会被提前到当前作用域(全局作用域和函数作用域)的顶部。但赋值语句不会提前,依然留在原地var x = function(){}; var y = 123;而函数的声明也会提前到作用域的顶部function f(){}对以上的总结就是:只要是声明(变量声明或函数声明)就会被提前,但赋值语句不会被提前以下代码中的y所在的环境,是全局环境,而不是当前 new 所在的环境new Function('return y');