【问题标题】:Why does a function declaration within a method's parenthesis result in method.variableName()?为什么方法括号中的函数声明会导致 method.variableName()?
【发布时间】:2015-08-20 06:04:25
【问题描述】:

当我在 javascript 方法的括号中声明一个变量时,我得到了对函数对象的一个​​有趣的补充。但是,我实际上无法在函数对象中找到生成的逻辑。

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

console.log(towel) //function forEach.towel()

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

注意:此评估全部在 Chrome 开发控制台中完成。也许这有助于返回特定的语法?

【问题讨论】:

  • 赋值是一个表达式,它的计算结果是一些东西。该示例令人困惑,除非事先使用var 声明了towel,否则它会创建一个隐式全局变量。我不会推荐这个。
  • @elclanrs 为什么console.log(towel) //function forEach.towel() 只是好奇
  • @TributetoAPJKalamSir 因为您正在为函数分配毛巾
  • forEach. 部分很有趣,我在 FF 中只得到 function ()
  • FF 似乎总是按我的预期做,我不知道我为什么一直使用 Chrome。

标签: javascript function object methods prototype


【解决方案1】:

由于您正在对尚未声明为 var 的变量进行赋值,因此它会泄漏到全局范围。

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

【讨论】:

  • 但是 OP 日志中的输出显示,这是forEach 的方法,而不是全局变量???一个奇怪的输出是问题的主题。
  • 那应该是错误的。如果你使用 ecma strict “使用严格”;第一个 stmt 将是未定义毛巾的错误。我很确定他不会看到 forEach.towel()
  • 是的,那应该是错误的。该示例没有告诉我们是否声明了 towel。无论如何,towel 应该是全局范围内的变量,或者是当前范围内的变量,但绝不应该是 forEach 的方法。似乎也有括号,这使得日志记录更加奇怪。我想说这只是 Chrome 控制台中的一个错误,(或者 OP 搞砸了他们的日志记录?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2017-12-05
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多