首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript中创建全局变量的新实例

如何在Javascript中创建全局变量的新实例
EN

Stack Overflow用户
提问于 2018-09-11 05:52:30
回答 1查看 129关注 0票数 0

在代码的一开始,我创建了一个全局变量DT的新实例,但是当我试图在方法中为它重新分配一个新对象时,我的全局变量并没有改变。

代码语言:javascript
复制
const functions = require('firebase-functions');
const DecisionTree = require("decision-tree")
var firebase = require('firebase-admin');
const cors = require('cors')({origin: true});


......

var boards;
var dt;
var training_dat;

var class_name = "NextMove";
var features = ["C1", "C2", "C3", "C4", "C5", "C6", "C7", "C7", "C9"];

ref.once('value').then(function(snap) {
    boards = snap.val(); // query all data
    training_data = new Array();
    for(var B in boards){
        training_data.push(boards[B]);
    }
    dt = new DecisionTree(training_data, class_name, features);
    // HERE dt is a model with 500 rows.
});



exports.train = functions.https.onRequest((request, response) => {
.....

    dt=new DecisionTree(new_training_data, class_name, features);
//HERE dt is a model with 1000 rows
    response.send({output: "Training"});
});

exports.DOSOMETHING = functions.https.onRequest((request, response) => {
    // if i call dt here it is still a model with 500 rows.
    response.send({output: "Done"});
});

所以我开始我的脚本,我得到的dt是500行。如果我调用"train“,我得到的结果是1000行。但是当我调用"DOSOMETHING“时,我的变量dt仍然有500行,就像前面的方法对他没有影响一样。

很抱歉,这听起来可能很愚蠢,但我想不通;

EN

回答 1

Stack Overflow用户

发布于 2018-09-11 08:02:39

Node.js不会将使用var声明的变量放入全局作用域。(see related Question)。

虽然您可以在不使用var关键字的情况下通过为dt赋值来创建全局,但它在严格模式下会出错。您可以尝试为global.dt而不是dt赋值,以创建和访问全局值,而不会出现严格的模式错误。

对于多次需要一个模块的每个Node.js documentation,始终返回第一次需要该文件时创建的相同缓存module.exports对象。因此,您还应该能够需要一个空的js文件,比如appdata.js,只要您想要访问应用程序中的通用名称空间对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52265980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档