为了账号安全,请及时绑定邮箱和手机立即绑定

理解这段代码的方法。它是如何工作的?

理解这段代码的方法。它是如何工作的?

一只萌萌小番薯 2021-06-07 14:15:14
我正在探索 javascript 中的范围,并开始知道这个问题。我不明白这个问题是如何运作的。function checkType() {  return foo;  foo = 10;  function foo() {};  var foo = 11;};console.log(typeof checkType())我的问题是 javascript 编译器如何决定返回函数而不是变量。欢迎任何参考或解释。
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

首先所有的函数声明都被提升到一个范围内。因此,首先代码将变量移动foo到作用域的顶部并将其值初始化为函数。


变量的第二个声明没有被提升,因为函数声明已经被提升。所以代码是一样的


function checkType() {

  var foo = function(){}

  return foo;

  foo = 10;


  foo = 11; 

};


查看完整回答
反对 回复 2021-06-11
?
www说

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())


查看完整回答
反对 回复 2021-06-11
  • 3 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信