【问题标题】:Using a variable that has yet to be declared使用尚未声明的变量
【发布时间】:2021-07-04 09:09:05
【问题描述】:

我在理解 Javascript 的称为提升的引擎技术时遇到了问题。

我尝试在文件顶部创建var 以快速访问和编辑,但我想使用尚未声明的变量。

第一次尝试:

var easy_to_edit_value = "some text " + a_yet_to_be_defined_var;

//imagine loads of code so its hard to find the correct funtion to edit the log

function my_function (a_yet_to_be_defined_var){
    console.log(easy_to_edit_value);
}
my_function("more text");

这会在第 1 行产生错误,因为未定义 a_yet_to_be_defined_var

看完这篇文章后:post-by-apsillers 我又试了一次,但这次声明了没有价值的 var(所以它是已知的但未定义的,直到在某处声明了 futheron)

var a_yet_to_be_defined_var; // now its known so this error is gone
var easy_to_edit_value = "some text " + a_yet_to_be_defined_var;

function my_function (a_yet_to_be_defined_var){
    console.log(easy_to_edit_value);
}
my_function("more text");
//still undefined


//new attempt with a fresh var being set in the function before being called
var new_var;
var easy_to_edit_value = "some text " + new_var;

function my_function2 (a_yet_to_be_defined_var2){
  new_var = a_yet_to_be_defined_var2;
    console.log(easy_to_edit_value);
}
my_function2("more text");
//still undefined

但是这个输出:some text undefined 我期待 some text more text 因为我在请求之前填充了 var。

请注意,这些函数不是使用 my_function("something") 运行的,而是由以下代码触发的:client.on('message', my_function);,我已经看到了相关问题的箭头函数解决方案,但我不确定如何让它在这里工作。

有没有可能实现这个功能?

【问题讨论】:

  • 虽然a_yet_to_be_defined_var 稍后被声明,但它与尝试使用的范围不同,并且仅在my_function 的范围内可用。在这种情况下,变量提升不起作用。
  • new_var 在被赋予值之前被声明和使用 - 这是明显相同结果的完全不同的原因。

标签: javascript variables scope


【解决方案1】:

不要定义一个名为easy_to_edit_value的值,而是将其更改为一个名为easy_to_call_function的函数,该函数将返回"some text "new_var的当前值连接。

一旦分配了(varlet)变量,每次都必须重新分配或重新计算。

let new_var;
const easy_to_call_function = () => "some text " + new_var;

function my_function2(a_yet_to_be_defined_var2) {
  new_var = a_yet_to_be_defined_var2;
  console.log(easy_to_call_function()); // Call the function
}

my_function2("more text");

【讨论】:

    【解决方案2】:

    需要在函数内部重新声明变量:

    var new_var;
    var easy_to_edit_value = "some text " + new_var;
    
    function my_function2(a_yet_to_be_defined_var2) {
      new_var = a_yet_to_be_defined_var2;
      easy_to_edit_value = "some text " + new_var;
      console.log(easy_to_edit_value);
    }
    my_function2("more text");

    如果一个变量发生变化,其他变量不会根据新值更新。这种编程需要一个非常高级的编译器,而没有多少人愿意制作。程序员必须自己更新变量。

    【讨论】:

    • 所以这需要在函数内部编辑easy_to_edit_value 以获得任何效果,对吧?所以基本上我想要实现的目标是不可能的。
    • @RamondeVries 是的。我认为 ReactJS 有类似的东西,但我不完全确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2011-01-22
    • 2017-05-18
    • 2017-07-05
    • 2019-09-19
    相关资源
    最近更新 更多