此Javascript代码段的正确变量范围是什么

时间:2017-07-21 11:45:36

标签: javascript

我写了下面这个函数。我需要读取图像的尺寸,然后将其缩小。在初始回调后,我想使用我计算的widthheight值来调整大小并保存图像。我的变量超出了范围,我得到ReferenceError: width is not defined。如何正确确定这些变量的范围,以便它们可用于resize函数?

  function saveImage(image) {
    return new Promise((resolve, reject) => {
      gm(image.data).size(function(error, value) {
        if (value.width > image.maxSize || value.height > image.maxSize) {
          max = Math.max(value.width, value.height);
          if (value.width == max) {
            width = image.maxSize; height = null;
          } else {
            height = image.maxSize; width = null;
          }
        } else {
          width = value.width; height = value.height;
        }
      })
      .resize(width, height)
      .write('./tmp/test.jpg', function(error, value) {
        if (!error) console.log(error);
      });;
    });
  }

2 个答案:

答案 0 :(得分:1)

你应该正确定义你的变量...我更喜欢你应该学习es6语法并使用“let”和“const”作为变量,并且范围广泛,谢谢: - @ ravi

答案 1 :(得分:0)

在承诺中使用箭头功能,但在下面的.size()行中,您使用旧式匿名函数,然后您将失去范围。您可以尝试使用.size()

的箭头功能
.size((error, value) => {})