为什么在if()内部定义的函数未定义

时间:2018-07-11 08:07:53

标签: javascript

var d = 1
if (function f() {}) {
  d += typeof f
}
console.log(d)

输出:1个未定义

为什么 typeOf 函数未定义,有人可以解释吗?

我知道我们不会实时使用这些typeof声明。但是,我试图了解Javascript如何处理函数定义...

5 个答案:

答案 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之前对它进行回答