问题标签 [javascript-scope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
329 浏览

javascript - 作用域时如何使我的javascript函数异步

我的一个 js 文件中有一个名为“updateStatus”的方法。我在每个 JS 文件中定义所有内容,如下所示。

现在我想让这个函数异步,但是如果我在下面的函数声明前面放一个异步,我会收到一个错误,说它需要在同一行上有一个分号。

0 投票
1 回答
51 浏览

javascript - 可变范围和事件监听器回调

我有以下代码,现在可以使用。问题是为什么?

以前我在 mouseup 回调中定义了我的startXand ,如下所示:startY

但是每次在第一次触发事件后,我得到相同的 startX 和 startY 值。为什么?这对我来说没有意义,因为每次 mouseup 事件的回调函数完成时,let 的范围都应该重置变量?

我根据 Taplars 评论更新了我的代码,现在范围按我的预期工作

0 投票
2 回答
1022 浏览

javascript - 使用 Hooks 编辑 React 状态

我想要一个全局变量,我可以使用钩子在任何地方进行编辑。

在示例中,我有 2 个组件都使用相同的钩子。在我看来,它External toggle正在编辑自己的范围count,并且Internal Toggle也在改变自己的范围。

两个切换是否可以编辑相同的数据?

代码示例: https ://codesandbox.io/s/520zvyjwlp

index.js

useCount.js

0 投票
2 回答
47 浏览

javascript - JavaScript:理解作用域链

以下代码片段中的范围链是什么 -

我对此有几个疑问 -

  • 为什么即使变量在全局范围内可用,函数中的记录器仍在foo打印?undefined是因为在条件 falsy 块中重新声明了相同的变量,因此全局变量被从范围中删除了吗?
  • 此外,如果我们将函数内部 if 语句下的变量声明替换为footo varlet则函数内部的记录器会foo从全局范围打印名称。这是如何工作的?
0 投票
2 回答
27 浏览

javascript - 作用域链中的内部函数和参数函数有什么区别?

我知道 JavaScript 的执行上下文是在调用函数时创建的。但我不明白下面的例子。示例 1 和示例 2 非常相似。

然而,这些结果并不相同。

我已经引用了链接。You-Don't-Konw JS博客参考以及与 stackoverflow 相关的问题

示例 1

示例 2

我希望结果示例 1 和示例 2 都是 Bye。如果 JavaScript 的执行上下文是在函数调用的时候创建的,为什么两个结果不同呢?

0 投票
0 回答
33 浏览

javascript - 声明性和对象环境记录如何与“var”、“let”和“const”相关?

我正在尝试更深入地研究 javascript,虽然我找到了关于“var”、“let”和“const”之间差异的解释以及关于 ES6“环境记录”(声明性与对象)的解释,但我是当我在 Google Chrome 浏览器控制台中键入以下代码时,仍然无法理解为什么以下代码的工作方式:

如果console.log(b)打印 4,但console.log(window.b)打印undefined,那么b定义的范围是什么?

我知道当var在函数之外使用时,它会undefined在全局范围内创建一个变量。我不明白的是,在上面的示例中,当letconst在函数之外使用时会发生什么?

我根据其他答案假设这种行为与 ES6 环境记录有关,但是当我阅读参考书时,它对我来说确实没有意义。

有人可以用比那本参考书更简单的术语来解释这一点吗?

0 投票
3 回答
173 浏览

javascript - 更改原型中的值在 JavaScript 中不起作用

我是 JS 新手,让我们看看下面的代码。

我想在使用原型时将鼠标的腿属性值更改为 2,但我无法更改它。我得到的输出是 4。请帮助这是为什么?

0 投票
2 回答
945 浏览

javascript - 从外部访问在 JavaScript switch 语句中声明的变量

为什么

返回error: Uncaught ReferenceError: text is not defined

我不明白为什么变量文本返回未定义。

0 投票
1 回答
35 浏览

javascript - JS 如何评估表达式 ({...}).objMethod()?

根据我对如何在 JS 中评估表达式的有限知识,在下面的代码中,我知道括号使 JS 引擎评估括号内的任何内容,作为表达式({..}),因此({..})这将评估{...}返回到全局范围的对象(在此案例,<<我对吗?如果不是,请纠正我)或表达式的范围。

但我不明白 Greet 函数如何在({...}).greet()从表达式返回的对象的范围/上下文中进行评估({..})。通常,至少我会将表达式的返回值分配给返回的 obj 的变量/引用,然后调用该 obj 的 greet() 方法,如

然后,如何评估以下代码。

谢谢

0 投票
2 回答
136 浏览

javascript - 如何将 onFormSubmit(e) 和 onEdit(e) 嵌套在一起

我希望 onFormSubmit(e) 成为我的主要功能触发器,并且我希望在其中嵌套 onEdit(e)。基本上,无论如何,触发器将运行 onFormSubmit 但如果有任何编辑,它将在 onEdit 中执行其他操作,如果没有,则它将执行其他操作。

我无法理解并使其发挥作用。

我的脚本触发器将 onFormSubmit 显示为唯一的函数,而 onEdit 不在下拉列表中。

编辑:设法获得我的 lastRow 值。但是,我仍然希望获得一个可以获取所有列的 lastRow 值的命令,而不是手动执行它。

编辑:使用FOR循环有助于整理值。