Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个JavaScript代码会返回错误?_Javascript - Fatal编程技术网

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

为什么这个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; } 控

我知道在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;
}
控制台日志(总和(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');
};