问题描述
我知道在 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
。