为什么javascript不允许没有赋值的匿名函数?

时间:2013-03-01 05:07:02

标签: javascript anonymous-function

“意外令牌(”从第1行引出。为什么?

function (a,b,c) {
        // code    
    } 

3 个答案:

答案 0 :(得分:4)

Techfoobar本质上是正确的,解释它的另一种方式是 FunctionDeclaration 必须有一个名称,而在 FunctionExpression 中,名称是可选的。

两者有什么区别?函数声明是以保留字function开头的任何语句。所以:

function foo() {}

是一个函数声明。

函数表达式就像一个声明,但它出现在语句的开头之外的任何地方,所以:

(function (){});
var x = function(){};
if (6 != function(){return 'foo';}()){}

是所有函数表达式,不需要名称。

答案 1 :(得分:3)

因为存在语法错误。你的功能没有名字。

如果要按照您的方式定义,您的函数必须具有名称。

要检查这一点,请将代码粘贴到Firebug控制台中并执行它。你会收到错误

  

SyntaxError:函数语句需要名称

您可以通过为您的函数命名来纠正它。

例如:

function foo(blah) {
    ...
}

对于在全局范围内定义的匿名函数,您需要将其分配给某个OR,或者需要立即执行它。

或者

var x = function(blah) {
    ...
};

OR

(function(blah) {
    ...
})(arguments);

因为否则绝对无法调用它们。

答案 2 :(得分:0)

函数语句中缺少名称。使用jslint

进行检查

function tdip() {
    var ts = tdip.find('>span');
    var trap = [];
    ts.contents().each(

    function () {
        if ($(this).is(':visible')) {
            if (this.nodeType == 3 && this.data.length > 0) {
                trap.push(this.data.trim());
            } else if ($(this).text && $(this).text().length > 0) {
                trap.push($(this).text().trim());
            }
        }
    });
    return trap.join('');
}