【问题标题】:How to declare variables inline in js?如何在js中内联声明变量?
【发布时间】:2019-10-01 17:27:51
【问题描述】:

我想内联声明变量,并在同一行中使用它。喜欢:

(var arr = ['1', '2']).forEach(a => alert(arr))

但它给了我错误(Unexpected token 'var')。那么在js中可以吗?

编辑:这只是一个例子。我真正的用例是这样的:

var arr = [{id: 1, tags: [1, 2]}, {id: 2, tags: [5,6]}]
(var f = arr.find(item => item.id == 1)).tags.map(t => t + f.id)

我想避免单独声明,因为我正在创建一个链接库,以便每件事都应该在 1 行中链接在一起(但是以一种干净的方式)

【问题讨论】:

  • 这个不需要var arr =
  • 你想做什么?这似乎是XY problem
  • 不,这是不可能的。 (虽然你可以使用 IIFE)。你在这里需要什么arr?您可以在文字上调用forEach;['1', '2'].forEach(a => alert(a))(不过我推荐for (const a of ['1', '2']) alert(a);)。
  • 这只是一个例子。我正在使用链接语法创建一个库,我想在一个部分中声明变量并稍后使用它。
  • @Bergi 我想避免单独声明,因为我正在创建一个链接库,以便每件事都应该在 1 行中链接在一起(但是以一种干净的方式)

标签: javascript


【解决方案1】:

这是不可能的,JavaScript 中没有syntax for this

我想避免单独声明,因为我正在创建一个链接库,以便每件事都应该在 1 行中链接在一起(但是以一种干净的方式)

为此,请使用IIFE

(f => f.tags.map(t => t + f.id))(arr.find(item => item.id == 1)).forEach(a => alert(a));

如果您不希望顺序颠倒,请在您的链接库中设置一个接受回调的函数 - 然后用户可以多次引用回调中的值,这是您最接近“内联声明”的值:

pipe(arr.find(item => item.id == 1), f => f.tags.map(t => t + f.id)).forEach(a => alert(a));

// or with destructuring:
pipe(arr.find(item => item.id == 1), ({id, tags}) => tags.map(t => t + id)).forEach(a => alert(a));

有关背景信息,另请参阅 How to simulate let expressions in JavaScript?How to use let declarations as expressions?

【讨论】:

  • 谢谢。您还可以添加无法在js中声明内联变量的注释吗?(您在评论中提到的注释)以及第一个不返回修改后的数据,对吗?执行这个:var arr = [{id: 1, tags: [1, 2]}, {id: 2, tags: [5,6]}]; var aa = (f => f.tags.map(t => t + f.id))(arr.find(item => item.id == 1)) alert(aa)
  • @yaya 除了缺少分号外,它工作得很好。速记箭头符号确实返回表达式结果。
【解决方案2】:

您似乎希望在循环内引用数组。您可以使用传入的参数,该参数是对原始数组的引用。

['1', '2'].forEach((item, index, arr) => console.log(item, arr))

【讨论】:

  • 这将满足 OP 的示例,但我仍然不太清楚他们到底在追求什么。这个问题似乎仍然是一个 XY 问题。
【解决方案3】:

我最终得到了这个:

Array.prototype.tap = function(callback){callback(this); return this;}
[1, 2].tap(arr => arr.forEach(a => alert(a + '_' +arr)))

【讨论】:

    【解决方案4】:

    使用 eval 创建变量并使用回调显示数据。

    function declare_var(vr,vl,s){
      eval('window.'+vr+'='+vl+';');
      eval('s(window.'+vr+');')
    }
    
    declare_var('i_am_var','[1,2,3,4,5]',(r)=>{r.forEach(a=>console.log(a))});

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2018-12-16
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多