2014-09-28 131 views
-1

我想要的只是通过立即调用函数在控制台中打印消息。这里是例子:为什么我的JS代码不起作用?

function (a){ 
    return function (a){ 
     console.log('msg' + a); 
    } 
}(3); 

PS

请不要评判我的太快,我才开始学习的JavaScript。

回答

1

如果你调用一个自调用anonnymous功能,你需要将其封装:

(function (a){ 
    return function (a){ 
     console.log('msg' + a); 
    } 
}(3)); 

然后当你有一个关闭的值不会传递到返回的功能,所以试试这个,你会看到:

(function (a){ 
    return function (a){ 
     console.log('msg' + a); 
    } 
}(3)(7)); 

这是(3)(7)写在简单的词的例子:

var f1 = function (a){ 
    console.log(a); 
    return function (a){ 
     console.log('msg' + a); 
    } 
} 

var inheritFunction = f1(3); // Calling f1(3) won't return what you are looking for. 
inheritFunction(7); // Returns the original value 
+0

非常有趣的例子。但我不明白他们之间的区别。我的意思是这个差异在'}(3));'和'}(3)(7));' – barbara 2014-09-28 22:18:08

+0

哦,我现在看到了。谢谢你的解释。 – barbara 2014-09-29 11:20:32

+0

很高兴帮助。你从Codeschool学习吗? – Rod 2014-09-29 19:30:56

6

用圆括号括起来,使您的代码有效的JavaScript语法。我想你想声明一些匿名函数。这里是如何做到这一点:

(function() { 
    return function(a) { 
     console.log('msg' + a); 
    } 
})()(3); 

或者你的意思是:

(function someFunc(a) { 
    console.log('msg' + a); 
})(3); 

在您的匿名范围返回函数第一种情况,所以你需要传递任何参数之前先调用它。

在第二种情况下,它只是通过直接传递参数来立即声明和执行的匿名函数。

+0

第一个例子。 – barbara 2014-09-28 22:04:26

+0

我将停止修复您的帖子,现在(刚刚投票给您);;) – 2014-09-28 22:05:38

1

这可能会实现:

(function(a) { 
    return function(a) { 
    console.log('msg' + a); 
    } 
})(3)(5); 

它说msg5,你找出原因;)

相关问题