javascript - js函数写法的蛋疼问题
PHP中文网
PHP中文网 2017-04-10 14:48:52
0
7
567

强迫症菜鸟一枚...

function name(num){
    var width = a;
    var default_width = b;
    var scale = b / a;
    var real = Math.ceil(num / scale);
    return real;
}

写一些函数经常会遇到类似的问题,像这个函数我会多次调用.但是前三行其实都是重复计算的.

var width = a;
var default_width = b;
var scale = b / a;
function name(num){
    var real = Math.ceil(num / scale);
    return real;
}

写成上面这种感觉很乱

(function nameVar(){
    var width = a;
    var default_width = b;
    scale = b / a;
}())
function name(num){
    var real = Math.ceil(num / scale);
    return real;
}

最后写成上面这样了

想问一下类似这样的函数有什么好一些的写法?不重复计算,看起来也容易明白.

PHP中文网
PHP中文网

认证高级PHP讲师

reply all(7)
巴扎黑
var a = 40, b = 20;
var cname = {
    width: a,
    default_width: b,
    scale: a / b,
    ceil: function(num) {
        return Math.ceil(num/this.scale)
    }
}

console.log( cname.ceil(2) );
小葫芦

利用立即调用函数表达式闭包的概念.

var name = (function() {
    var width = a;    // 目测这个变量在你代码中没用哈
    var default_width = b;    // 同上
    var scale = b / a;

    return function(num) {
        var real = Math.ceil(num / scale);
        return real;
    };
}());
黄舟
var O = {};
O.config = {
    a: 10,
    b: 20
};
O.test = function(data) {
    var config = this.config;
    var scale = (data.a || config.a) / (data.b || config.b);
    return Math.ceil(data.num / scale);
};

调用:

// 默认配置
O.test({
    num: 2
});
// 覆盖配置
O.test({
    num: 2,
    a: 30,
    b: 40
});
巴扎黑

把公用的部分抽取出来放进config对象里。

var config = {
    default_width: b,
};
function name(num, width){
    width = width | a;
    var scale = config.default_width / width;
    var real = Math.ceil(num / scale);
    return real;
}
伊谢尔伦

写个高大上的。

var Cname = function(a, b){
    this.scale = a / b;
}

Cname.prototype = {
    constructor: Cname,
    ceil: function(num){
        return Math.ceil(num / this.scale);
    }
}

var test = new Cname(40,  20);

console.log(test.ceil(4));

http://jsfiddle.net/qq273628265/7f79cryh/2/

刘奇
"use strict";

function User() {
    this.scale = 0;
}
User.prototype.name = function(num) {
    var real = Math.ceil(num / this.scale);
    return real;
}

MyUser = new User();

MyUser.scale = 1;
var name = MyUser.name(5);

console.log(name);

JavaScript面向对象简介

大家讲道理
var GVAR = {};
GVAR.real = function real (){
    var width = a,
        default_width = b,
        scale = b/a;
    return function( num ){
        return Math.ceil(num/scale);
    }
}();

GVAR.real(2);
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template