javascript - 输出为肯定应该是“1function”的东西给出“1undefined”。错误在哪里?
问题描述
下面的示例必须输出确定的函数,因为 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() 大括号内,并且只返回布尔值。那么解释一下,为什么它返回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
范围内没有变量。
那么解释一下,为什么它返回3?
您正在为变量显式分配值。该变量仍在范围内。
如果你这样做,你会得到同样的效果:
if (f = function f(){}) {
所以:
(function f(){})
- 创建一个函数
- 命名函数
f
- 在被调用的函数内创建一个
f
包含对函数的引用的变量 - 评估为一个函数,它是一个真值,由
if
尽管:
(f = function f(){})
- 创建一个函数
- 命名函数
f
- 在被调用的函数内创建一个
f
包含对函数的引用的变量 f
在函数外创建一个变量function f(){}
评估为一个函数,f
并由=
f = function f(){}
还评估为一个函数,它是一个真值,由if
推荐阅读
- javascript - React 16 读取状态问题
- python-3.x - Windows 10 python 文件不保存
- python - 如何修复字典的键顺序
- c# - 如何覆盖 .net 中的列表配置
- angular - 如何在 Angular 9 中添加 json 来解析数组
- ios - SwiftUI:限制键盘链接视图的方向
- python - 在 Maya 中,我可以阻止动画曲线节点读取吗?
- laravel - 给定一组用户名,我如何从 Laravel 的模型中只检索他们的详细信息?
- codeception - 是否可以在 _failed() 挂钩中获取失败测试的文件名?
- spring-boot - SpringBoot Actuator 日志文件端点返回 404