如何解决为什么这段 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');
};
如果您想将其吊起,则需要使用 Function Declaration
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。