微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这段 JavaScript 代码会返回错误?

如何解决为什么这段 JavaScript 代码会返回错误?

我知道在 JavaScript 中只提升了函数声明,这意味着它应该在运行函数 sum 后打印 30。

但是它说diff没有定义,不应该被提升吗?

sum(10,20);
diff(10,20);
    
function sum(x,y) {
  return x + y;
}
    
let diff = function(x,y) {
  return x - y;
} 

解决方法

是的,let 和 const 被提升,但在运行时评估实际声明之前您无法访问它们。

,

您在初始化之前正在访问该函数。

所以这应该可行,

let diff = function(x,y) {
  return x - y;
} 

function sum(x,y) {
  return x + y;
}

console.log(sum(10,20));
console.log(diff(10,20));

,

let diff 将提升,但在函数 diff(10,20); 将被调用的那一刻,变量 diff 不会与函数一起定义。 谷歌这个话题函数声明 vs 函数表达式

,

这是因为正如你所说,只有函数声明被提升,而不是函数表达式(将无名函数分配给变量)。以下代码有效:

sum(10,20);
diff(10,20);
    
function sum(x,y) {
  return x + y;
}
    
function diff(x,y) {
  return x - y;
} 

要按照您所做的方式声明 diff,您必须将其提升到代码的顶部:

let diff = function(x,y) {
  return x - y;
} 

sum(10,y) {
  return x + y;
}
    

,

因为Function Expressions不像Function Declarations那样被吊起来

JavaScript 中的函数表达式是 未提升,与函数声明不同。你不能使用功能 创建表达式之前:

console.log(notHoisted) // undefined
//  even though the variable name is hoisted,the definition isn't. so it's undefined.
notHoisted(); // TypeError: notHoisted is not a function

var notHoisted = function() {
   console.log('bar');
};

https://developer.mozilla.org/en-US/docs/web/JavaScript/Reference/Operators/function#function_expression_hoisting


如果您想将其吊起,则需要使用 Function Declaration

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。