Javascript 全局变量不保留其值

Javascript global variable not retaining its value

我正在尝试使用两种 Javascript 方法访问全局变量。第一个应该写入变量,第二个应该读取它。

我有以下代码:

var selectedObj;
function first(){
    selectedObj = window.getSelection();
    alert(selectedObj);
}

function second(){
    alert(selectedObj);
}

所以用户在一个内容可编辑的文本框中选择了一些文本。当函数 first() 运行时,它实际上会显示所选择的内容。所以我知道它的值进入了全局变量 selectedObj。

但是在运行函数second()之前,选中的文本变为未选中。但是,没有任何事情会显式设置 selectedObj 的值。因此,我希望它仍然保留用户先前选择的值。

但事实并非如此。当函数 second() 运行时,警报为空。

如果用户没有取消选择文本,警告将不会为空,所以我知道全局变量可以工作.但即使用户取消选择文本,我也需要它保留其值。

我怎样才能做到这一点?

来自文档(伙计,我喜欢文档):Window.getSelection()

Returns a Selection object representing the range of text selected by the user or the current position of the caret.

你真的回答了你自己的问题:

The alert won't be empty if the user doesn't deselect the text

您正在将 window.getSelection() 的结果分配给您的全局变量。

selectedObj = window.getSelection();

当结果为空时,你的全局是空的。正如@larz 在他的评论中所说,它很可能在 how/when 函数中被调用 first

就像其他人建议的那样,将其设置为局部变量(按值而不是引用)似乎可行。

var selectedObj;

function first() {
  let newSelection = window.getSelection().toString();
  selectedObj = newSelection;
  alert(selectedObj);
}

function second() {
  alert(selectedObj);
}
Lorem ipsum yada yada
<button onclick="first()">First</button>
<button onclick="second()">Second</button>

如问题所述,在 second() 运行之前,文本未被选中,导致 selectedObj 设置为空值。

如果 window.getSelection() !== ""

,您应该设置 selectedObj 的值