下面的示例必须输出确保函数,因为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>
答案 0 :(得分:3)
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
答案 1 :(得分:1)
您将获得undefined
,因为代码中的任何地方都没有定义function f
。在function
中写入if statement
并没有定义function
。该代码只是将其假定为真实值,if语句(但实际为f
)的条件不存在。您可以在外部定义f
,它可以正常工作,也可以在if中执行分配,然后它也可以工作
var x = 1;
if (f=function(){}) {
x += typeof f;
}
console.log(x);
答案 2 :(得分:-2)
var x = 1;
var f;
if ( f = function() {} ) {
x += typeof f;
}
console.log(x);