var d = 1
if (function f() {}) {
d += typeof f
}
console.log(d)
输出:1个未定义
为什么 typeOf 函数未定义,有人可以解释吗?
我知道我们不会实时使用这些typeof声明。但是,我试图了解Javascript如何处理函数定义...
答案 0 :(得分:1)
语句if (function f() {})
实际上并未导致函数被定义。由于if
将表达式作为输入,因此该条件实际上是作为函数表达式求值的。
函数是真实值,因此执行if
分支,并且JavaScript解释器在内部对您的代码进行如下处理:
var d = 1;
d += typeof f;
console.log(d);
很显然,在第二条语句中未定义f
,因此结果显示为1undefined
。
答案 1 :(得分:1)
if
条件是表达式,而不是语句。在您的代码中,function f() {}
是function expression
,而不是function declaration
,其名称f
只能在其主体中使用。
如果上面的内容对您来说很难理解,那么以下是与您的代码等效的非正式代码:
var d = 1;
tmp = function f() {};
if (tmp) {
delete tmp;
d += typeof f;
}
console.log(d);
答案 2 :(得分:0)
仅考虑/访问变量声明,因此您可以执行以下操作:
var d = 1
if (g = function f() {}) {
console.log(typeof g) // 'function'
console.log(typeof f) // 'undefined'
}
答案 3 :(得分:-1)
您应该在if之前创建函数,然后在if中调用
那样:
var d = 1
function func() {
return true;
}
if (func) {
// do some thing
}
console.log(d)
答案 4 :(得分:-1)
USING
将返回未定义,因为您的typeof
尚未编程为返回任何内容。换句话说,您正在尝试查找尚未定义的内容的类型。
例如
function f
输出为var d = 1;
function f() {
return 2;
}
if (f) {
d += typeof f
}
console.log(d)
,因为您要添加数字和字符串- typeof 返回一个字符串-,因此javascript将数字和字符串连接起来。
如果您想知道为什么函数声明不能在if语句中起作用,请在here之前对它进行回答