Javascript 为什么函数声明在方法';s括号导致方法.variableName()?

Javascript 为什么函数声明在方法';s括号导致方法.variableName()?,javascript,function,object,methods,prototype,Javascript,Function,Object,Methods,Prototype,当我在javascript方法的括号内声明一个变量时,会向函数对象提供一个有趣的附加内容。但是,我实际上无法在函数对象中找到结果逻辑 [].forEach(tower=function(){console.log(42)}) console.log(tower)//函数forEach.tower() 有人能解释一下这一独特声明背后的逻辑吗 注意:此评估都是在Chrome开发控制台中完成的。也许这就是返回的特定语法的原因?因为您正在对一个尚未声明为var的变量进行赋值,所以它会泄漏到全局范围 毛巾

当我在javascript方法的括号内声明一个变量时,会向函数对象提供一个有趣的附加内容。但是,我实际上无法在函数对象中找到结果逻辑

[].forEach(tower=function(){console.log(42)})

console.log(tower)//函数forEach.tower()

有人能解释一下这一独特声明背后的逻辑吗


注意:此评估都是在Chrome开发控制台中完成的。也许这就是返回的特定语法的原因?

因为您正在对一个尚未声明为var的变量进行赋值,所以它会泄漏到全局范围


毛巾现在是全局范围内的一个变量。

赋值是一个表达式,它的计算结果是某物。这个例子令人困惑,除非事先用
var
声明了
tower
,否则它会创建一个隐式全局变量。我不建议这样做。@elclars为什么
console.log(tower)//函数forEach.tower()
curious@TributetoAPJKalamSir因为您正在为函数指定tower
forEach.
部分很有趣,我只得到FF.FF中的
function()
,它似乎总是做我期望的事情,我不知道为什么我一直在使用Chrome。但是OP日志中的输出显示,它是一个
forEach
的方法,而不是一个全局变量???一个奇怪的输出是问题的主题。这应该是错误的。如果使用ecma strict,“使用strict”;第一个stmt将是一个未定义的错误。我很肯定他不会看到forEach的。毛巾是的,那应该是错的。该示例没有告诉我们是否声明了
tower
。无论如何,
tower
应该是全局范围内的变量,或者是当前范围内的变量,但决不能是
forEach
的方法。此外,似乎还有括号,这使得日志记录更加怪异。我想说这只是Chromes控制台中的一个bug(或者OP把他们的日志搞糟了?)