Javascript"()"在功能结束时

时间:2014-05-16 13:53:13

标签: javascript

编辑:对重复问题采取措施,但搜索" '()' Javascript"对我没有任何结果。

接下来......我正在对PHP中的图像进行一些像素处理,并将一些Javascript逻辑移植到PHP中,以实现我在html5画布上看到的效果。 Javascript使用一些曲线计算来实现"复古效果"。在循环中调用像素计算:

使用Javascript:

for (var i = (width * height); i >= 0; --i) {

    idx = i << 2;

    // curves
    if (!!_effect.curves) {
        _imageData[idx  ] = _effect.curves.r[ _imageData[idx  ] ]; // r
        _imageData[idx + 1] = _effect.curves.g[ _imageData[idx + 1] ]; // g
        _imageData[idx + 2] = _effect.curves.b[ _imageData[idx + 2] ];  // b

    }


}

effect.curves对象如下:

var _effect = {
    curves: (function() {
      var rgb = function (x) {
        return -12 * Math.sin( x * 2 * Math.PI / 255 ) + x;
      },
      r = function(x) {
        return -0.2 * Math.pow(255 * x, 0.5) * Math.sin(Math.PI * (-0.0000195 * Math.pow(x, 2) + 0.0125 * x ) ) + x;
      },
      g = function(x) {
        return -0.001045244139166791 * Math.pow(x,2) + 1.2665372554875318 * x;
      },
      b = function(x) {
        return 0.57254902 * x + 53;
      },
      c = {r:[],g:[],b:[]};
      for(var i=0;i<=255;++i) {
        c.r[i] = r( rgb(i) );
        c.g[i] = g( rgb(i) );
        c.b[i] = b( rgb(i) );
      }
      return c;
    })(),  // <-- THIS PART
};

我的问题是:上面注意到的行中的()是否告诉curves函数在_imageData循环内调用时运行?

2 个答案:

答案 0 :(得分:3)

不,函数调用是作为该对象初始化的一部分发生的(&#34; _effect&#34;)。物业的价值&#34;曲线&#34;将是调用该函数的返回值。该函数构建一个对象并返回它。

在JavaScript中,对带有括号参数列表的函数的引用是总是函数调用。

为了更清楚,想象一下该函数已被声明为普通函数:

function makeCurves() {
  var rgb = function (x) {
    return -12 * Math.sin( x * 2 * Math.PI / 255 ) + x;
  },
  r = function(x) {
    return -0.2 * Math.pow(255 * x, 0.5) * Math.sin(Math.PI * (-0.0000195 * Math.pow(x, 2) + 0.0125 * x ) ) + x;
  },
  g = function(x) {
    return -0.001045244139166791 * Math.pow(x,2) + 1.2665372554875318 * x;
  },
  b = function(x) {
    return 0.57254902 * x + 53;
  },
  c = {r:[],g:[],b:[]};
  for(var i=0;i<=255;++i) {
    c.r[i] = r( rgb(i) );
    c.g[i] = g( rgb(i) );
    c.b[i] = b( rgb(i) );
  }
  return c;
}

然后初始化看起来像:

var _effect = {
  curves: makeCurves()
};

答案 1 :(得分:3)

这意味着函数在创建并被赋值给curve变量后立即被调用。