Javascript JS-重新分配字符串

Javascript JS-重新分配字符串,javascript,Javascript,我现在正在研究JS,并将其与VB.Net进行比较 我想给我之前声明的字符串添加一个值 在VB.Net中,它将如下所示: Dim MyString as String Mystring = "Test" let Mystring; Mystring = 'test'; 在JS中,它应该是这样工作的: Dim MyString as String Mystring = "Test" let Mystring; Mystring = 'test'; 但是

我现在正在研究JS,并将其与VB.Net进行比较

我想给我之前声明的字符串添加一个值

在VB.Net中,它将如下所示:

Dim MyString as String
Mystring = "Test"
let Mystring;
Mystring = 'test';
在JS中,它应该是这样工作的:

Dim MyString as String
Mystring = "Test"
let Mystring;
Mystring = 'test';
但是,在以下代码中,这不适用于我:

var https = require('https');
let MyString = 'null';       //String that I want to declare

var request = https.request(options, function (res) {    //I do a Get Request to get a String from an URL
    var data = '';
    res.on('data', function (chunk) {
        data += chunk;
    });
    res.on('end', function () {
        MyString = data; 
        console.log(MyString);     //Here I get the URL Content as Result for MyString
    });
});

console.log(MyString);  // Here I get 'null' as Result

我希望URL内容数据被分配给MyString,这样我就能够读取函数外部的数据。这怎么可能呢?

那里发生了三件事:


  • const
    声明一个“变量”,不能更改(常量)的值

  • 通过在内部函数中使用
    let
    ,可以使用局部变量来隐藏该常量。内部局部变量和外部常量之间没有任何联系

  • 在代码的末尾,在记录值的地方,它仍然会有它的初始值,因为它还没有被更改。尚未调用事件回调。有关详细信息,请参见对和的答复

  • 如果要添加到外部
    myString
    ,请使用
    let
    声明它,并且在函数内部引用它时不要使用
    let

    // SEE BELOW AS WELL
    const https = require("https");
    let myString = ""; // You probably want `""` or `null`, not `"null"`
    
    var request = https.request(options, function (res) {
        let data = "";
        res.on("data", function (chunk) {
            data += chunk;
        });
        res.on("end", function () {
            // *** No `let` here
            myString = data; 
            console.log(myString);
        });
    });
    
    console.log(myString);  // You'll still get `""` or `null` here, it isn't updated yet
    
    请注意,我将
    var
    替换为
    let
    const
    ,并将变量名称从
    MyString
    更改为
    MyString
    。在现代JavaScript代码中,
    var
    是没有位置的,而绝大多数常见的变量命名惯例是以小写字母开头(初始大写用于构造函数函数名)

    但是,因为上面的#3,你真的根本不想要
    myString
    。相反:

    const https = require("https");
    
    var request = https.request(options, function (res) {
        let myString = "";
        res.on("data", function (chunk) {
            myString += chunk;
        });
        res.on("end", function () {
            // *** Just use `myString` here, don't try to use it
            // at the top level of your module at all.
            console.log(myString);
        });
    });
    

    旁注:您的代码假定
    chunk
    将是一个字符串,但我不确定从
    https.request
    获得的流是否正确,但我不确定这是否正确。如果是这样,很好,但它很可能是一个对象,在这种情况下,
    +=
    将不起作用(您需要或类似)。

    const
    声明一个常量,使用
    let
    。但是您仍然不太幸运,请看您需要将其更改为:
    let MyString
    MyString=data。外部的
    console.log(MyString)
    仍然不起作用。你可能想看看:和