return ResponseEntity.ok("Success");
"功能"的原因打印输出可能是因为分别因为在创建阶段,函数是在变量(A)
之前的变量对象中创建的。
但是如果函数是在变量foo
之前创建的,那么为什么我不能解析函数(参见foo
),而是我可以解析变量(参见(D)
})?
(C)
答案 0 :(得分:1)
是事件的顺序
var foo
已悬挂,并声明变量foo
。function foo() {}
被悬挂,重新声明变量foo
并为其指定值(函数)console.log(typeof foo)
记录功能foo = 'hi'
为foo
分配一个字符串,覆盖之前的值(该函数)console.log(foo)
记录字符串foo()
抛出错误,因为字符串不是函数答案 1 :(得分:0)
函数声明在其他所有内容之前运行
(function() {
function foo() { //Function declaration
return 'hello';
}
console.log(typeof foo); // (A) function pointer
console.log(typeof bar); // (B) undefined
var foo = 'hi',
bar = function() { //Function expression
return 'world';
};
console.log(foo); // (C) hi
foo();// (D) error
})();
想象一下你的程序看起来像这样,因为foo()是第一个运行
的程序答案 2 :(得分:0)
一开始你变量foo被挂起但没有初始化,所以它是未定义的。然后它被函数声明覆盖。这就是typeof返回Function的原因。然后将值赋给它('hi'),因此尝试调用该函数失败。
对于bar,您使用的是函数表达式语法(var bar = function()
)而不是函数decalration(function bar()
),因此bar作为未定义的变量被提升,稍后将值分配给它