为什么这个JavaScript代码会返回错误?
我知道在JavaScript中只有函数声明被挂起,这意味着它应该在运行函数sum后打印30 然而,它说差异是没有定义的,它不应该被吊起来吗为什么这个JavaScript代码会返回错误?,javascript,Javascript,我知道在JavaScript中只有函数声明被挂起,这意味着它应该在运行函数sum后打印30 然而,它说差异是没有定义的,它不应该被吊起来吗 sum(10,20); 差异(10,20); 函数和(x,y){ 返回x+y; } 设diff=函数(x,y){ 返回x-y; }是的,let和const被提升,但在运行时评估实际声明之前,您无法访问它们。在初始化函数之前,您正在访问该函数 所以这应该行得通 let diff=函数(x,y){ 返回x-y; } 函数和(x,y){ 返回x+y; } 控
sum(10,20);
差异(10,20);
函数和(x,y){
返回x+y;
}
设diff=函数(x,y){
返回x-y;
}
是的,let和const被提升,但在运行时评估实际声明之前,您无法访问它们。在初始化函数之前,您正在访问该函数
所以这应该行得通
let diff=函数(x,y){
返回x-y;
}
函数和(x,y){
返回x+y;
}
控制台日志(总和(10,20));
console.log(diff(10,20))代码>让diff提升,但此时功能diff(10,20)将被称为变量diff,但不会使用函数定义。
用谷歌搜索这个主题函数声明vs函数表达式这是因为正如你所说,只有函数声明被提升,而不是函数表达式(将一个无名函数分配给一个变量)。以下代码工作:
sum(10,20);
差异(10,20);
函数和(x,y){
返回x+y;
}
函数差(x,y){
返回x-y;
}因为函数表达式
不像函数声明那样被提升
JavaScript中的函数表达式是
与函数声明不同,未提升。你不能使用函数
创建表达式之前,请执行以下操作:
如果希望提升函数,则需要使用函数声明
。因为在定义函数之前调用函数要理解这一点,需要理解JavaScript提升机制。基本上,在执行之前重写代码,以便在顶部声明sum
和diff
,然后定义sum
,进行调用,然后定义diff
(该定义保留在调用之后,因为您使用了let
)。因此,您在定义之前调用。let
和const
声明被挂起,但它们的定义保持不变。和你说的基本想法一样,但我想说得更准确些。
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');
};