分配语法

时间:2014-02-07 18:51:47

标签: javascript syntax

我在http://www.somethinghitme.com/2013/11/11/simple-2d-terrain-with-midpoint-displacement/上看到了以下代码。

function terrain(width, height, displace, roughness, seed) {
    var points = [],
        // Gives us a power of 2 based on our width
        power = Math.pow(2, Math.ceil(Math.log(width) / (Math.log(2)))),
        seed = seed || {
            s: height / 2 + (Math.random() * displace * 2) - displace,
            e: height / 2 + (Math.random() * displace * 2) - displace
        };

    // ...
}

我不熟悉这种语法。它究竟实现了什么?这个赋值后,points变量包含什么?

3 个答案:

答案 0 :(得分:2)

以下作品是Variable Statement,它允许显示多个声明,以逗号分隔。

var points = [],
   // Gives us a power of 2 based on our width
   power = Math.pow(2, Math.ceil(Math.log(width) / (Math.log(2)))),
   seed = seed || {
        s: height / 2 + (Math.random() * displace * 2) - displace,
        e: height / 2 + (Math.random() * displace * 2) - displace
   };

它与使用单个变量语句的处理方式相同,并且选择使用哪种形式是样式首选项。 (我选择后者,jslint建议前者。)

var points = [];
var power = Math.pow(2, Math.ceil(Math.log(width) / (Math.log(2))));
var seed = seed || {
  s: height / 2 + (Math.random() * displace * 2) - displace,
  e: height / 2 + (Math.random() * displace * 2) - displace
};

需要注意的一件有趣的事情是var seed = seed || ..,其中seed已经是一个参数。这是因为var没有“定义”变量,就像在像C这样的语言中,而是声明应用范围范围的注释。因此,整个范围只有一个 seed变量,var再次使它没有区别 - 它一直是,并且将永远是一个局部变量。< / p>

请参阅What does "options = options || {}" mean in Javascript?以了解seed || ..的使用情况。

答案 1 :(得分:0)

points变量是一个空数组。

答案 2 :(得分:0)

假设您指的是seed = seed || { 对象文字 },目的是在没有调用函数的情况下为seed提供默认值该参数(或该参数未定义,或任何其他 falsy 值)。

如果存在seed,它将具有传入的值,但如果它未定义(或null,0,false等),则将为其提供一个对象。