You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过函数获取变量名并将其作为字符串使用?

直接获取传入变量的原变量名不可行

首先明确:原生JavaScript(包括jQuery)没办法直接在函数内部获取到外部传入变量的原变量名。

当你调用myFunction(foo)时,传递给函数的是foo变量存储的值,函数参数oof只是接收这个值的副本,和原变量foo的名称没有任何关联——函数根本不知道这个值是来自叫foo的变量,还是直接写的字面量"Hello World!"。

针对你棋子场景的替代方案

你的核心需求是把类似e4这样的位置变量名拆分出列(e)和行(4),传递给棋子类。这里给你几个实用的替代方案:

方案1:传递包含位置信息的对象(最推荐)

把变量名作为对象的键,变量值作为对应的值传递,这样函数里就能拿到键名(也就是你要的位置字符串):

// 假设你的棋子类
class ChessPiece {
  constructor(col, row) {
    this.col = col;
    this.row = row;
    console.log(`棋子定位:列${col},行${row}`);
  }
}

// 你的位置变量
const e4 = "皇后";
const a1 = "车";

// 处理函数
function addPiece(positionObj) {
  // 获取位置字符串(原变量名)
  const positionStr = Object.keys(positionObj)[0];
  // 拆分列和行
  const col = positionStr[0];
  const row = positionStr.slice(1);
  // 创建棋子实例
  new ChessPiece(col, row);
}

// 调用方式(ES6可简写为{ e4 })
addPiece({ e4: e4 });
addPiece({ a1: a1 });

方案2:直接传递位置字符串和变量值

如果不需要隐藏位置信息,也可以直接把位置字符串和变量值一起传,写法更直白:

function addPiece(positionStr, pieceValue) {
  const col = positionStr[0];
  const row = positionStr.slice(1);
  new ChessPiece(col, row);
}

// 调用方式
addPiece("e4", e4);
addPiece("a1", a1);

方案3:直接传递拆分后的参数(最简洁)

如果在调用前就明确列和行信息,直接传拆分后的值是最直接的:

// 直接创建棋子实例
new ChessPiece("e", "4");
new ChessPiece("a", "1");

这个方案省去了中间函数的处理,适合逻辑简单的场景。

内容的提问来源于stack exchange,提问作者Newbie_Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:41:12