在嵌套函数内部放入代码(大约30行)是更快还是在没有嵌套函数的情况下调用代码更快?

时间:2019-02-23 10:00:10

标签: javascript performance

说我有一段代码,例如

for (j = 0; j < 4; j++) {
    for (var i = 0; i < 4; i++) {
        str = pieceData[piece][rotation]
        char = str.substr(k, 1);

        if (char == 1) {
            c.fillStyle = pieceColours[piece]
            c.fillRect(x + (i * 20), y + (j * 20), 20, 20)
            c.fill()
        } else {
            c.fillStyle = 'green'
            if (x + (i * 20) > 180) {
                c.fillStyle = 'red'
            }
            c.fillRect(x + (i * 20), y + (j * 20), 20, 20)
            c.stroke()
        }
        k++
    }
}
k = 0

如果我在

之类的嵌套函数中调用它,速度会变慢吗?
function pieceGen() {

    for (j = 0; j < 4; j++) {
        for (var i = 0; i < 4; i++) {
            str = pieceData[piece][rotation]
            char = str.substr(k, 1);

            if (char == 1) {
                c.fillStyle = pieceColours[piece]
                c.fillRect(x + (i * 20), y + (j * 20), 20, 20)
                c.fill()
            } else {
                c.fillStyle = 'green'
                if (x + (i * 20) > 180) {
                    c.fillStyle = 'red'
                }
                c.fillRect(x + (i * 20), y + (j * 20), 20, 20)
                c.stroke()
            }
            k++
        }
    }
    k = 0
}
//________________________________________________________________________

function animate() {
    pieceGen()
    requestAnimationFrame(animate)
}

由于笔记本电脑的性能不佳,我需要考虑到这一点,如果我使用越来越多的嵌套功能,它会减慢速度吗?

2 个答案:

答案 0 :(得分:3)

函数调用在javascript中的开销很小,请随意使用它们,因为它们可以使您的代码更简洁

答案 1 :(得分:0)

函数是函数对象。在JavaScript中,不是原始类型(未定义,空,布尔值,数字或字符串)的任何对象都是对象。 这意味着,在第二种情况下,您将有以下开销:

  • 将创建一个包含函数说明的对象
  • 将分配一个存储地址,用于存储函数的上下文(关闭)

有两个附加功能:

  • 其中有几个字节的额外对象(函数)
  • 额外关闭

对于性能而言,这两者都不重要。

代码的可读性和封装将为您提供更好的服务!您应该始终考虑性能,这是事实,但是函数是javascript的构建块,应该使用它们。