3 回答
TA贡献1804条经验 获得超7个赞
首先所有的函数声明都被提升到一个范围内。因此,首先代码将变量移动foo到作用域的顶部并将其值初始化为函数。
变量的第二个声明没有被提升,因为函数声明已经被提升。所以代码是一样的
function checkType() {
var foo = function(){}
return foo;
foo = 10;
foo = 11;
};
TA贡献1775条经验 获得超8个赞
当我们运行代码时,它有两个阶段,首先是creation phase在这个阶段语法解析器将读取代码并提升函数和变量,第二阶段是execution phase将值分配给提升的变量,
这里需要注意的一点是函数在创建阶段存储在内存中,因为它是变量被提升但值未初始化的地方(将在执行阶段分配)
提升后编译器会这样对待你的代码
function checkType() {
var foo = function() {}; //hoisted function
return foo;
foo = 10;
foo = 11;
};
console.log(typeof checkType(), '\nRturned value from function --->', checkType())
如果您将函数定义为变量,则它只会被提升但不会用值进行初始化,您可以看到以下示例
function checkType() {
return foo;
foo = 10;
var foo = function foo() {};
var foo = 11;
};
console.log(typeof checkType(), '\nRturned value from function --->', checkType())
添加回答
举报