分析JavaScript中的函数

时间:2012-12-06 18:34:41

标签: javascript function

尝试分析这段代码,但不确定它的作用是什么?这如何演示JS中的函数如何工作?对不起,对于新问题。困惑?感谢。

function merge(root) {
    for (var i = 1; i < arguments.length; i++) {
        for (var key in arguments[i]) {
            root[key] = arguments[i][key];
        }
    }
}

var merged = merge(
    {name: "Batou"},
    {city: "Niihama"},
    (activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"});

assert(merged.name === "Batou",
    "The original name is intact.");
assert(merged.max === 35,
    "The maximum number of sets is 35.");

5 个答案:

答案 0 :(得分:2)

首先,修复三个(语法)错误:

  • 第2行:I改为小写i
  • 第6行:您希望功能return root;使其正常工作,否则undefined将被分配到merged
  • 第12行:({

除此之外,代码很简单。 function merge需要任意数量的参数。它是iterates来自索引1的arguments object(即不包括root参数),并且对于每个项目enumerates its propertiescopying他们的值为{{1}对象。 bracket syntax用于按名称访问属性值。

因此,root 合并全部通过objects进入第一个对象,覆盖现有的密钥。

答案 1 :(得分:0)

这会将两个或多个对象合并为一个。

{name: "Batou"}

是一个快捷方式:

var obj = new Object();
obj.name = "Batou";

函数arguments内部是一个在调用时传递的参数数组,您可以像在数组中一样更改对象中的属性,但使用字符串:

obj["name"] = "Batou";

assert关键字将检查条件是否为真,它用于调试建议。

答案 2 :(得分:0)

首先,我在您的代码中看到3个错误:大写I应为i; (activity:应为{activity:;该函数应该return root

如果你修复了这个问题,该函数应该将传递给它的所有对象合并到一个对象中。你传递了3个物体:

  • {name: "Batou"}
  • {city: "Niihama"}
  • {activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"}

将这3个对象作为输入,该函数返回一个合并对象:

{
    name: "Batou",
    city: "Niihama",
    activity: "Weights", 
    min: 0,
    max: 35, 
    points: 2500, 
    scale: "sum"
}

答案 3 :(得分:0)

Javascript有一个名为arguments的对象,它包含所有参数,一个函数被调用。

function merge(root) {
    for (var i = 1; I < arguments.length; i++) {
        for (var key in arguments[i]) {
            root[key] = arguments[i][key];
        }
    }
}

基本上接受多个参数并将其他参数的所有属性(从第二个参数开始)放入传递给函数的第一个对象

说:

这是传递给函数的第一个参数: {name: "Batou"}

然后循环遍历其他2个对象的属性

{city: "Niihama"},
(activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"});

并将其属性添加到第一个属性中,从而产生此

{name: "Batou",
city: "Niihama",
activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"}

答案 4 :(得分:0)

要使代码按写入的方式工作,需要进行修改:

function merge(root) {
    for (var i = 1; i < arguments.length; i++) {
        for (var key in arguments[i]) {
            root[key] = arguments[i][key];
        }
    }
    return root; // without this line, "merged" below will always be undefined. 
}

var merged = merge(
    {name: "Batou"},
    {city: "Niihama"},
    {activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"});

assert(merged.name === "Batou",
    "The original name is intact.");
assert(merged.max === 35,
    "The maximum number of sets is 35.");

或者,它需要以不同的方式使用:

function merge(root) {
    for (var i = 1; i < arguments.length; i++) {
        for (var key in arguments[i]) {
            root[key] = arguments[i][key];
        }
    }
}

var merged = {name: "Batou"};
merge(
    merged,
    {city: "Niihama"},
    {activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"});

assert(merged.name === "Batou",
    "The original name is intact.");
assert(merged.max === 35,
    "The maximum number of sets is 35.");