2014-09-28 89 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,你找出原因;)

相關問題