Javascript 读取文件时,变量赋值和作用域是如何工作的?

Javascript 读取文件时,变量赋值和作用域是如何工作的?,javascript,d3.js,Javascript,D3.js,我试图理解一个文件是如何读入javascript的,我遇到的代码真的让我陷入了一个循环。以下是我认为正在发生的事情: csv被读入并分配给变量“data”,该变量仅存在于{}中 然后,对于每一行数据,将其分配给变量“d”,并对其进行处理 我的问题是: 那么,如何在foreach循环之外引用“d”?这不是本地的循环吗?什么变量类型是“d.sales”,是对对象d的某种引用?最后,“d.salesperson”到底是从哪里产生的 片段: d3.csv("sales.csv", function(er

我试图理解一个文件是如何读入javascript的,我遇到的代码真的让我陷入了一个循环。以下是我认为正在发生的事情:

  • csv被读入并分配给变量“data”,该变量仅存在于{}中
  • 然后,对于每一行数据,将其分配给变量“d”,并对其进行处理 我的问题是:

    那么,如何在foreach循环之外引用“d”?这不是本地的循环吗?什么变量类型是“d.sales”,是对对象d的某种引用?最后,“d.salesperson”到底是从哪里产生的

    片段:

    d3.csv("sales.csv", function(error, data) {
      if (error) throw error;
    
      // format the data
      data.forEach(function(d) {
        d.sales = +d.sales;
      });
     // Scale the range of the data in the domains
    x.domain(data.map(function(d) { return d.salesperson; }));
    ....
    

    如果您查看该页面中的代码。csv文件包含
    销售人员
    销售人员

    1-您说的文件已读入且内容已分配给
    数据

    2-有点。您应该查看
    forEach
    的功能及其格式
    但在本例中,是
    d
    是对数据中每个数据的引用。给定csv,每个数据都有一个
    销售
    属性和一个
    销售人员
    属性

    那么,如何在foreach循环之外引用“d”?这不是本地的循环吗?什么变量类型是“d.sales”,是对对象d的某种引用?最后,“d.salesperson”到底是从哪里产生的

    d
    只是一个参考。你可以给它取任何你想要的名字。它只是对数据中每个数据的引用。它们不是相同的
    d
    ,尽管它们引用相同的基准

    data.forEach(function(value, index, array){});  
    
    forEach
    函数是一个循环,它可以访问其循环所覆盖的数据中的以下项,
    ——它是数组中的每个数据,
    索引
    ,它是该值的索引,
    数组
    ,它是数组本身。在您的例子中,
    d
    是函数的
    部分的名称

    当d3读取文件时,它会创建一个对象数组,每个对象的属性基于csv文件中的头。在这种情况下,它是这样的:

    [{
        "salesperson": "Bob",
        "sales": 33 
    }, {
        ...
    }]
    

    在尝试拆分d3图形之前,应该先编写一些基本的javascript。另外,如果你不想做一个图表,只想读一个csv文件,d3就太过分了

    使用JavaScript时要记住的一件好事是没有块级作用域。这将提示您d不是“循环的本地”。但这真的帮不了你。“d”只是一个任意命名的引用,其作用域是它出现在代码段中的每个函数

  • 是的,数据是一个数组
  • .forEach和.map是数组函数,它们将应用于数组(数据)的每个元素(d)的函数作为参数

  • 函数d3.csv()读取文件并创建数据数组的每个元素,每个元素都包含sales和salesperson属性。

    您可以尝试将对象注销到console,并查看其结构。那可能会更清楚一点。一般来说,javascript对象只是许多嵌套对象和数组