在javascript中声明一个简单的函数

时间:2013-11-30 23:23:37

标签: javascript function declaration

我花了最近3天试图缩小问题,现在发现它我无法理解。

我想检查一个函数是否存在,如果没有创建它。然而,JS总是说函数存在,即使不存在。

检查:

if (!blablabla) {

    function blablabla() {

        //do stuff

    }

    alert("1");

}
else{

    alert("2");

}

它应该警告1但总是警告2!

3 个答案:

答案 0 :(得分:4)

那是因为该功能始终存在。

声明函数时,它在代码开始运行时存在于整个范围内。函数声明被提升到作用域级别,因此如果在if语句中或在其外部声明它,则无关紧要。

如果要在运行时创建函数,则必须将其创建为函数表达式,并将其分配给变量:

if (!blablabla) {

    blablabla = function() {

        //do stuff

    };

    alert("1");

}
else{

    alert("2");

}

答案 1 :(得分:3)

ECMA-262似乎不允许条件函数声明,但是存在允许它们的漏洞。在大多数浏览器中,以下将打印“bar !!”但是在Firefox中它会抛出一个引用错误,因为 bar 尚未定义。

function foo() {

  if (!bar) {
    console.log('no bar');
    function bar(){}

  } else {
    console.log('bar!!');
  }
}

foo()

为避免引用错误,您可以使用:

  if (typeof bar == 'undefined')

然而,由于不同浏览器中的行为不同,使用条件声明并不是一个好主意。可以使用函数表达式:

if (typeof bar == 'undefined') {
  bar = function(){};
}

将在所有浏览器中有条件地创建全局 bar 功能。变量声明仅在当前执行上下文中创建函数

if (typeof bar == 'undefined') {
  var bar = function(){};
}

答案 2 :(得分:0)

if ( typeof blablabla !== 'function' ) {
    blablabla = function() {
        //do stuff
    };
    alert("1");
}
else
{
    alert("2");
}