2016-03-07 73 views
1

我已经给出了这个函数来预测输出。 这是说refrence错误,我仍然想知道为什么?函数if条件子句

if(function x(){console.log("ABC");}) 
    { 
     x(); 
    } 

希望有人可以对词法范围进行一些说明。 在此先感谢。

+1

请参阅http://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements – elclanrs

+1

这是一个函数表达式,并没有在任何范围内声明任何变量,但它自己。你真的不应该在if语句的条件下使用它。 – Bergi

+0

@elclanrs:不完全是 – Bergi

回答

5

你有什么是函数表达式,即使命名为之一,而你并没有使用该表达任何东西。您将其命名为x的事实并不意味着功能x将在范围内被吊起,因为表达式不适用。

function foo() {} // function declaration 
(function bar() {}); // named function expression, the() makes it not-a-statement here 

foo(); // ok 
bar(); // doesn't exist 

所以实际上你从来没有宣称的功能x,这就是为什么当你尝试调用它不存在。