下面的示例必须输出确定的函数,因为 x 的值为“1”(整数),然后我们传递一个名为“f”的参数(函数的)。这个函数是否执行某些操作或为空并不重要,但我确信变量 f --> 指向函数。所以typeof(f)
一定会回来function
.
现在,添加一个整数和“函数”(因为 typeof 总是返回一个字符串)将得到一个字符串 --> 1function。
现在,令人惊讶的是输出是“1undefined”。如何?
<script>
var x = 1;
if (function f(){}) {
x += typeof f;
}
console.log(x);
</script>
根据 Ellepsis 的回答,声明不包含在 if() 大括号内,并且仅返回 bool 值。那么解释一下,为什么返回3呢?
<script>
var x = 1;
if (y = 2) {
x = x + y;
}
console.log(x);
</script>
最佳答案
if (function f(){}) {
函数声明将在当前作用域中创建一个同名的变量。
函数表达式只会在其内部创建同名的变量。
因此变量f
仅存在:
if (function f(){ })
^^^^
here
函数表达式本身作为函数求值,if
语句将其选取为真值,但作用域内没有 f
变量。
Explain this then, why is it returning 3?
您正在为变量显式赋值。该变量仍在范围内。
如果你这样做,你会得到同样的效果:
if (f = function f(){}) {
<小时/>
所以:
(function f(){})
- 创建一个函数
- 将函数命名为
f
- 在名为
f
的函数内部创建一个变量,其中包含对函数的引用 - 作为函数求值,为真值,通过
if
来测试
同时:
(f = function f(){})
- 创建一个函数
- 将函数命名为
f
- 在名为
f
的函数内部创建一个变量,其中包含对函数的引用 - 在函数外部创建变量
f
function f(){}
作为函数求值,并通过=
分配给 f = function f(){}
也计算为一个函数,它是一个真值,由if
测试
f
关于javascript - 对于应该是 "1undefined"的东西,输出给出 "1function"。错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54882418/