Javascript 为什么不管你用什么论点,它的结果总是正确的?
我正在阅读“JavaScript Allongé”,在关于函数的一节中遇到了这一点Javascript 为什么不管你用什么论点,它的结果总是正确的?,javascript,Javascript,我正在阅读“JavaScript Allongé”,在关于函数的一节中遇到了这一点 function (value) { return (function (copy) { return copy === value })(value) }(value); 假设我通过5。。。一个字符串、一个函数、一个数组或任何东西作为该问题的参数!为什么评估结果会是真的?似乎没有任何内容传递给参数copy,这是什么?我能想到的唯一一件事是,当您将5传递给value时,它也会被丢弃在返回函数的参
function (value) {
return (function (copy) {
return copy === value
})(value)
}(value);
假设我通过5。。。一个字符串、一个函数、一个数组或任何东西作为该问题的参数!为什么评估结果会是真的?似乎没有任何内容传递给参数copy,这是什么?我能想到的唯一一件事是,当您将5传递给value时,它也会被丢弃在返回函数的参数中
谢谢 您正在将同一对象传递回比较中。因此,它的计算结果为
true
。然而,这里发生的一些事情使得这比参考文献更有趣
{...})(value)
(值)
使其成为一个self,因此它是内联计算的。这是Javascript的一个很好的特性,理解它是值得的。您可以这样使用它们,但它们非常适合创建该范围和扩展代码
(function (value) { // function accepts a `value` as an argument
return (function (copy) { // function accepts a `copy` argument
return copy === value // `copy` and `value` are both 5
})(value) // `value` becomes `copy` on line 2
}(5)); // pass in 5, becomes `value` on line 1
换言之:
value
参数(value
现在是5
)value
调用,它接受copy
参数(copy
现在等于value
,等于5
)复制
与值
进行比较,两者都已设置为5
所有这些都是一种奇妙的方法,将两个局部变量设置为相同的值,然后比较它们。因此,只要一个值等于它本身,它就会返回true。有一些东西被传递到参数copy示例的第四行正在发送值以用作copy的参数 因此,如果copy是value的副本,那么copy===value将始终返回true 示例中的语法是定义然后立即调用函数。这个版本在逻辑上是相同的,如果这样看,可能行为更有意义:
var funcA = function(value) {
var funcB = function(copy) {
return copy === value;
}
return funcB(value);
}
result = funcA(5);
您在第一次调用中传递了5(值)
函数(值){
/*移除所有东西,以便在第一步中集中精力*/
}(5);
然后返回一个“函数调用”,该函数接收“value”(当前值为5)作为“copy”中接收的参数(因此copy的值现在为5)
//函数(值){注释行还不重要,所以您可以集中精力
返回(函数(副本){
//返回副本===值
})(价值)
//}(价值);
- 此内部函数返回“value”(可访问,因为内部函数可以访问外部范围(第一个函数及其参数))和“copy”(之前收到的“value=5”)的比较
- value=5=copy然后返回true
//函数(值){行还不重要,所以您可以集中精力
//返回(函数(副本){
返回副本===值
//})(价值)
//}(价值);
简单地说,你在比较相同的值。这和我们所说的别名差不多吗?+通过提及和引用“自动执行匿名函数”的一个很好的解释,等等,我想我看到了。。。值(5)也在内部/返回函数中传递,然后在“copy”变量中使用。外部函数将5传递给值的方式有很多方面:)@安东尼奥:对。有两个自执行函数,每个函数都传递一个参数。