访问var在函数范围之外

问题描述 投票:0回答:3

我有以下代码,并且我试图在外部访问selectedBrand var,以便在may代码中的其他位置使用它

var selectedBrand;
var brand_sel = d3.select('select')
    .on("change",function(b) {
        selectedBrand = d3.select("#brand").node().value;
    });

  console.log(selectedBrand)

[当我尝试安慰selectedBrand时,我得到undefined结果。

我尝试几乎所有我理解的事情都没有成功

非常感谢您的帮助

javascript function d3.js scope var
3个回答
0
投票

您正尝试记录它的值立即,但是直到执行更改处理程序之后,它将保持未定义状态:

下面的帮助说明吗?

var selectedBrand;
var brand_sel = d3.select('select')
   .on("change",function(b){
      selectedBrand = d3.select("#brand").node().value;
      run();
   })

var run = function() { console.log(selectedBranch); } // <- this runs after you've defined the value because you've called `run()` in your change handler
console.log(selectedBrand); // <- this runs first, while the value is undefined

感觉就像是古老的How do I return the response from an asynchronous call?


0
投票

只需调用您的函数brand_sel()。因为现在您只定义了它,但从未真正调用过它,所以它从未触发过,并且selectedBrand仍未定义。

而且这是我不想在代码中处理的一些肮脏的范围。通常,您正在执行的是错误的模式,这会导致错误。开始使用const / let来避免范围问题,并且通常尝试保持作用域整洁-这很容易成为function return,而不是通过函数调用直接更改变量。

至少,在代码顶部的"use strict";可能是一个好主意。

总的来说,听起来并不逊色,看来您正在开发一些“不太好”的做法。网络上甚至书籍中都有很多很好的教程,它们确实教会了JS“正确的方法”。我知道这听起来可能像是在抨击您,但请相信我,从长远来看,这是值得的,如果您不想花3个小时进行调试,为什么循环和不正确地更新您的值呢?] >


0
投票

首先感谢您的重播。我对javascript很陌生,正在边做边学。可能我完全误解了js逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.