javascript使用非内联函数

时间:2016-06-02 16:57:04

标签: javascript node.js function

我正在使用'二进制解析器' node.js中的NPM模块,我正在尝试使用自己的断言'功能而不是内联提供。我不知道问题是否是二元解析器的问题。或者是我无知在javascript中调用函数和/或函数引用。

这里的代码有效,但不是我想要的:

var Parser = require('binary-parser').Parser;

var data = new Buffer([0x23, 0x36, 0x74, 0x0e, 0x01, 0xff, 0xff]);

function range (min, val, max) {
    return (min <= val && val <= max);
}
var dataParser = new Parser()
.endianess('little')
.uint8('inside_humidity', {assert: function(x){return(x <= 100);}})
.uint16('barometer', {assert: function(x){return(20000 <= x && x <= 32500);},
     formatter: function(x) {return x/1000;}})
.uint16('wind_direction', {assert: function(x){return(x <= 360);}})
.uint16('crc');

console.log(dataParser.parse(data));

我想打电话给我自己的&#39;范围&#39;功能如下:

    .uint16('barometer',
        {assert: range(20000, x, 32500),
     formatter: function(x) {return x/1000;}})

但我明白了:

ReferenceError: x is not defined

所以我试过了:

assert: function(x){range(20000, x, 325000)}

{assert: function(x){range.bind(this, 20000, x, 32500)},

并获得:

ReferenceError: range is not defined

有可能做我想做的事吗?

2 个答案:

答案 0 :(得分:2)

您需要使用闭包:

function range(min, max) {
    return function(x) {
        return min <= val && val <= max;
    };
}

你可以写

…
.uint8('inside_humidity', {assert: range(-Infinity, 100)})
.uint16('barometer', {assert: range(20000, 32500), formatter: function(x) {return x/1000;}})
.uint16('wind_direction', {assert: range(-Infinity, 360)})
…

答案 1 :(得分:0)

你有没有尝试过:

.uint16('barometer', {assert: function(x){return range(20000, x, 32500);},

HTH