我有以下代码,并且我试图在外部访问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
结果。
我尝试几乎所有我理解的事情都没有成功
非常感谢您的帮助
您正尝试记录它的值立即,但是直到执行更改处理程序之后,它将保持未定义状态:
下面的帮助说明吗?
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?
只需调用您的函数brand_sel()
。因为现在您只定义了它,但从未真正调用过它,所以它从未触发过,并且selectedBrand
仍未定义。
而且这是我不想在代码中处理的一些肮脏的范围。通常,您正在执行的是错误的模式,这会导致错误。开始使用const / let
来避免范围问题,并且通常尝试保持作用域整洁-这很容易成为function return
,而不是通过函数调用直接更改变量。
至少,在代码顶部的"use strict";
可能是一个好主意。
总的来说,听起来并不逊色,看来您正在开发一些“不太好”的做法。网络上甚至书籍中都有很多很好的教程,它们确实教会了JS“正确的方法”。我知道这听起来可能像是在抨击您,但请相信我,从长远来看,这是值得的,如果您不想花3个小时进行调试,为什么循环和不正确地更新您的值呢?] >
首先感谢您的重播。我对javascript很陌生,正在边做边学。可能我完全误解了js逻辑。