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

我正在探索 javascript 中的范围,并开始知道这个问题。我不明白这个问题是如何运作的。


function checkType() {

  return foo;

  foo = 10;


  function foo() {};

  var foo = 11;

};


console.log(typeof checkType())

我的问题是 javascript 编译器如何决定返回函数而不是变量。欢迎任何参考或解释。


一只萌萌小番薯
浏览 149回答 3
3回答

三国纷争

首先所有的函数声明都被提升到一个范围内。因此,首先代码将变量移动foo到作用域的顶部并将其值初始化为函数。变量的第二个声明没有被提升,因为函数声明已经被提升。所以代码是一样的function checkType() {  var foo = function(){}  return foo;  foo = 10;  foo = 11; };

www说

当我们运行代码时,它有两个阶段,首先是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())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript