【问题标题】:why cannot javascript execute methods inside methods?为什么javascript不能在方法中执行方法?
【发布时间】:2016-10-24 21:41:12
【问题描述】:

在函数式语言中,函数可以在嵌套函数的参数括号内执行,这与 javascript 的等价物是受 Scheme 的启发。

f(f(f(f)))

console.log( 1 + 1 )
//2

javascript 怎么能在.log 方法参数括号内执行加法?

var list1 = []
console.log(list1.push("a"))
//1

但它无法执行.log 方法括号内的push 方法?为什么返回 1?

【问题讨论】:

  • 你看过Array.prototype.push的文档吗?
  • 你的主要问题对我来说没有意义。它返回 1 因为 push 返回您插入元素的数组的长度。它确实将元素推送到数组,但是当您记录推送的返回而不是 list1 时,您只会看到 1。如果您记录 console.log(list1.push("a"), list1),您会看到您的数组中有 a

标签: javascript methods functional-programming


【解决方案1】:

因为push返回数组的大小:

push() 方法将新项目添加到数组的末尾,并返回 新的长度。

它确实执行了推送功能,只是没有返回您所期望的。

JavaScript 是 written in only 10 days,所以我们被一些设计决策困住了。令人惊讶的是,我们甚至获得了与我们一样多的函数式风格(因为营销人员想要一种“类似 Java”的语言)。

JavaScript 使人们能够以函数式的方式编写代码,但可能存在一些障碍。

This quote 很有趣:

幸运的是,Eich 设法将一些很棒的想法潜入了该语言中 尽管他被要求做什么。

对于push 返回数组length 或您刚刚推送的内容或整个数组引用...等等是否会更好也不是完全明确的。

【讨论】:

    【解决方案2】:

    push 方法返回它修改的对象的新长度属性。

    返回: 调用该方法的对象的新长度属性。

    【讨论】:

      【解决方案3】:

      您的 .push 方法正在执行,但您看到的是 1,因为 push 返回了数组的新长度。见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

      【讨论】:

        猜你喜欢
        • 2021-05-09
        • 2022-01-25
        • 2011-05-07
        • 2020-01-03
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-12
        相关资源
        最近更新 更多