javascript - 对于应该是 "1undefined"的东西,输出给出 "1function"。错误在哪里?

标签 javascript html function

下面的示例必须输出确定的函数,因为 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
  • f = function f(){} 也计算为一个函数,它是一个真值,由 if 测试

关于javascript - 对于应该是 "1undefined"的东西,输出给出 "1function"。错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54882418/

相关文章:

c++ - OOP - 这应该如何完成?

Javascript 推送

Javascript根据另一个索引重新索引数组

jquery - onclick 更改/恢复容器内容

php - 使用 php 和 mysql 的登录页面

javascript - Open Layers 3层可见性——传递变量的问题

c++ - 模板函数中的通用模板参数

javascript - Firefox addon SDK : How to inject local . js 文件进入某些网站?

javascript - 从 ng-repeat 输入中获取 ng-model 值

html - CSS 表格单元格输入不占全宽