自定义块javascript?

自定义块javascript?,javascript,function,block,Javascript,Function,Block,我知道这是一个有点愚蠢的问题。 可以用javascript创建自定义块吗? 这是一个街区: if(a==2){ "block!" } for(;;){ "block!" } 这是一个街区: if(a==2){ "block!" } for(;;){ "block!" } 可能吗?我从来没有见过关于这个主题的任何东西。是否有可能在es6中实现这一点 这将是伟大的回调,它将允许您这样做: foo{ ... } 与此相反: foo(function()

我知道这是一个有点愚蠢的问题。 可以用javascript创建自定义块吗? 这是一个街区:

if(a==2){
    "block!"
}
for(;;){
    "block!"
}
这是一个街区:

if(a==2){
    "block!"
}
for(;;){
    "block!"
}
可能吗?我从来没有见过关于这个主题的任何东西。是否有可能在es6中实现这一点

这将是伟大的回调,它将允许您这样做:

foo{
    ...
}
与此相反:

foo(function(){
    ...
}

我想你会喜欢Ruby的


但是没有,在JavaScript中没有实现这一点的方法,我也没有听说过任何类似的es6功能。

您可以使用标签在JavaScript中创建块,但它们只有在您想作为AIK与它们分离并且它们没有自己的作用域时才有用,除了


正如我所知,JavaScript只有函数作用域、全局作用域,并且没有像C一样的块作用域。所以目前你不能这样做。如果您想要一个块,您必须将其包装在函数中,您已经列出了。

我已经看到了这个技巧,它使用try/catch为您提供了一个具有变量自身作用域的块:

try {
  throw 0;
} catch(variable) {
  //variable only exists in this block
  variable = 'my value';
  console.log(variable);
  //i can return from parent function here
}
//variable does not exist outside of the block
console.log(typeof variable);

使用try/catch有性能方面的考虑,但它很有用,因为如果块在函数或循环中,它仍然允许使用return或break。

回调基本上是一个函数表达式,通过引用作为参数传递,我认为您不能引用其他块。哪一个更好,在函数内部使用块作用域并使用break;或者使用一个普通函数,只做一个返回;?我在这里描述的带标签的块与函数不同;函数在JavaScript中有很大的开销。调用次数越少,代码的效率通常越高。