2016-12-17 110 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