> For the complete documentation index, see [llms.txt](https://doc.duaer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.duaer.com/zh/code/variables.md).

# 在 Duaer 里定义自定义变量

在 Duaer 里用自定义变量存值，并在多条数字组织中复用。
## 变量是什么

Duaer 变量是实例或项目里保存的键和值，不是 JavaScript 里临时的 const。运行到表达式或 Code 节点时，Duaer 把 $vars.键名 换成当时的值。

所有值都是字符串。键没有值时读到 undefined，这次运行不会因此失败。运行中不能改；要改就打开 Variables。一次运行内部记数据，用自定义执行数据，不要用变量。

## 范围：全局和项目

- 全局变量：整个实例都能读。
- 项目变量：只在该项目的数字组织里可读。
- 同名时，项目变量盖过全局变量。
- 实例所有者可以新建。项目里能不能新建，看你在该项目的角色。当前套餐不含变量时，界面会提示升级。

## 新建变量

1. 在 Variables 里点 Add variable。
2. 填写 Key 和 Value。键最长 50 个字符，值最长 1000 个字符。新键只能用字母、数字和下划线，且不能以数字开头，否则 $vars.键名 这种点号写法会断掉。
3. 从总览页新建时选择 Scope：Global 给整个实例，Project 只给选定的项目。从某个项目页新建时，范围就是这个项目。
4. 点 Save。

## 修改或删除变量

1. 在 Variables 里把鼠标停在那一行上。
2. 选 Edit 或 Delete。

## 在数字组织里读取

表达式和 JavaScript Code 节点都可以读：

```
{{ $vars.api_host }}
$vars.api_host
```

第一行是节点参数里的表达式。第二行是 Code 节点。键名就是保存时填的 Key。
## Questions

### Duaer 变量在表达式里怎么读？

在 Duaer 里写成 $vars.键名。表达式放在 {{ }} 里；JavaScript Code 节点直接写 $vars.键名。值一律是字符串。键没有值时是 undefined，运行不会因此失败。

### Duaer 的全局变量和项目变量哪个优先？

Duaer 的全局变量整个实例可读。项目变量只在该项目的数字组织里可读。同名时项目变量盖过全局变量。运行中不能改，要到 Variables 界面改。

