2016-12-17 150 views
0
var hi = function(type) { 
    if (type == "boss") { 
     return function(name) { 
      alert("Hi chief " + name); 
     }; 
    } else { 
     return function(name) { 
      alert("Hi " + name); 
     }; 
    } 
}; 

hi("boss"); // this will do nothing 

var returnedFunction = hi(); 

returnedFunction("boss"); // prompt "Hi boss" 

returnedFunction = hi("boss"); 

returnedFunction(); // prompt "Hi chief undefined" 

returnedFunction("Douglas"); // prompt "Hi chief Douglas"; 

好了,所以我明白是怎麼回事,除了第一個幾乎一切:功能沒有返回值(甚至沒有未定義)

hi("boss"); // this will do nothing 

我希望它返回「嗨首席未定義」。

不是「boss」參數意味着它進入if語句,它應該執行參數名稱未定義的函數:因此,您應該得到「Hi chief undefined」。

如何/爲什麼我會得到這種行爲的任何信息將是最受歡迎的。我想了解和學習JavaScript的基礎知識!

親切的問候

+1

的'hi'函數返回到另一個函數的引用。它不會返回'Hi Chief undefined',因爲你的'hi'函數中沒有'return'SAMPLE STRING''。 – Dekel

+1

'hi(「boss」)'返回另一個函數。爲什麼你會期望它返回其他東西? – Xufox

回答

3

它只返回函數,它不執行它。你會寫:

hi("boss")(); // it would print Hi chief undefined 

爲了執行它

你也許可以說,

hi("boss"); 

是equaivelnt寫

function(name) { 
    alert("Hi chief " + name); 
}; 

的在寫

hi("boss")(); 

就像佈線

function(name) { 
    alert("Hi chief " + name); 
}(); // notiice the() 
+0

謝謝,我明白了!您可以返回一個函數而不需要實際執行它。 – Devilution

+0

@Devilution是eaxctly!這是javascript中的一個importnat概念。 – user13377331

0

爲什麼不乾脆:

var hi = function(type, name) { 
    if (type == "boss") { 
     alert("Hi chief " + name); 
    } else { 
     alert("Hi " + name); 
    } 
}; 
+3

我知道有可能使它更容易,但對於我自己來說,瞭解究竟究竟是在運行什麼以及javascript函數背後的邏輯是如何工作的。 – Devilution

1

hi("boss");這行代碼將返回

function (name) { 
    alert("Hi chief " + name); 
} 

此功能。

現在你必須執行它。

爲了執行它剛寫hi("boss")();

-1

`

var hi = function(type) { 
    if (type == "boss") { 
     return function(name) { 
      alert("Hi chief " + name); 
     }; 
    } else { 
     return function(name) { 
      alert("Hi " + name); 
     }; 
    } 
}; 


//return a function not excecuted 
// hi(); 

// x is the returned function 
var x = hi("boss"); 
x("name"); 

// 2 
// hi("boss")("name"); 

`

+0

考慮提供一個你已經做出的改變和原因的解釋 – Leva7

+0

對不起,我的英文不好 –

+0

然後使用翻譯或盡力用英語解釋,有人可能會糾正你的語法。這不是一個低質量答案的藉口 – Leva7