Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
传递参数:Objective javascript_Javascript - Fatal编程技术网

传递参数:Objective javascript

传递参数:Objective javascript,javascript,Javascript,我对Objective javascript还不熟悉,即使我在javascript方面有丰富的经验。如何在此处将参数传递给calc闭包 var calc = (function() { var a = 5; var b = 0; return { add: function() { return a + b; }, subtract: function() { return a

我对Objective javascript还不熟悉,即使我在javascript方面有丰富的经验。如何在此处将参数传递给calc闭包

var calc = (function() {
    var a = 5;
    var b = 0;
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();​

    console.log(calc.divide());
我想把参数传递给calc like(calc.multiply(10,20))


提前感谢。

根据您的呼叫方法
计算乘法(a,b)
:应该有这样的:

var calc = (function() {
    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

console.log(calc.divide(20, 2));
var calc = (function() {
    var a = 5;
    var b = 0;
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function(n, d) {
            if (n != 0) return n / d
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

alert(calc.divide(3, 4));​
这里有一个简单的方法

var calc = function(a,b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
};

//console.log(calc.divide());
//I want to pass the parameters to calc like (calc.multiply(10,20));

calc(10,20).multiply();
否则,您必须修改每个方法以接受形式参数…

您的意思是这样的:

var calc = (function() {
    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

console.log(calc.divide(20, 2));
var calc = (function() {
    var a = 5;
    var b = 0;
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function(n, d) {
            if (n != 0) return n / d
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

alert(calc.divide(3, 4));​

下面的代码应该适用于您:

var calc = (function() {
    var a = 5;
    var b = 0;

    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b !== 0) return a / b;
            else {
                alert('division by zero');
                return false;
            }
        }
    };
})();

console.log(calc.multiply(10, 10));
我所做的编辑是在每个返回的函数上设置
a
b
参数,并通过严格设置
divide
函数使您与零的比较更安全

希望这有帮助

var calc = (function() {
    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();​

不过我会考虑改变你的警戒值来投掷一个错误。

你可以把参数给<代码> Calc < /Cord>,它返回一个对象,用两个数字来计算某个对象,或者只是让<代码> Calc < /Cord>一个具有计算某物功能的对象。您的要求
calc.multiply(10,20)
适用于第二种解决方案:

var calc = {
    add: function(a, b) {
        return a + b;
    },
    subtract: function(a, b) {
        return a - b;
    },
    multiply: function(a, b) {
        return a * b;
    },
    divide: function(a, b) {
        if (b != 0) return a / b
        alert('division by zero');
        return false;
    }
};​
否则,对于使用
calc(10,20).multiply()
,它将构建您已经拥有的闭包,但使用参数而不是两个局部常量:

function calc(a, b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            alert('division by zero');
            return false;
        }
    };
}

我可以说:“缩进是一件美妙的事情吗?”我相信标准是在被零除的情况下返回
NaN
。但是,如果您打算进行显式验证,我想警报是可以的。Calc不是Javascript构造函数,而是使用模块模式。不需要大写的函数名或new关键字。作为一个单身汉,它会像现在一样工作。有生活的需要吗?我会说不。