通过字符串访问本地范围的变量–除eval之外,什么都没有?

时间:2018-07-16 17:40:19

标签: javascript scope eval

请考虑以下代码段:

.ico

通过存储在let variableName = 'internalVariable'; { let internalVariable = 'whatever'; console.log(eval(propertyKey)); // prints 'whatever' } 中的字符串访问internalVariable有什么选择?我本来希望像variableName这样的东西,但似乎没有什么比它好。

鉴于这种特殊情况,是否有使用scope[variableName]的替代方法?

1 个答案:

答案 0 :(得分:1)

在需要动态访问诸如 之类的变量的情况下,惯用的做法是使用一个对象并根据需要动态计算属性名称。

$.ajax({
    url: url + '/' + id,
    method: "get",
    success: function (data) {
        var json = $.parseJSON(data);

        $("#preview").html(json.content);
        $('#viewM').modal({show:true}); 
    }
});

在带有var obj = {}; obj[getPropertyName()] = "hello world"; varlet的函数中声明的变量确实以对象之类的属性(函数调用的结束)的形式存在,但是JavaScript不提供任何变量将该事物称为对象的方式。使用const是可能的,但是通常这不是一个好主意,因为在现代运行时系统中没有尝试进行运行时优化,因为eval()使其变得非常复杂。

在JavaScript中对变量进行别名的唯一方法是通过eval()对象,这很奇怪,在“严格”模式下明确建议不要使用它。

[edit] —在以下内容中:Bergi在下面的评论中,(通常不推荐使用)arguments语句允许隐式引用对象属性,模块的with机制可以创建别名,尽管对我而言很难想象在实际实践中这是件好事。