我知道这是一个有点愚蠢的问题。是否可以在javascript中制作自定义块?这是一个块:
if(a==2){
"block!"
}
这是一个块:
for(;;){
"block!"
}
可能吗?我从来没有见过任何关于这个主题的东西。这有可能在 es6 中实现吗?
这对回调来说很棒,它可以让你这样做:
foo{
...
}
而不是这个:
foo(function(){
...
}
我知道这是一个有点愚蠢的问题。是否可以在javascript中制作自定义块?这是一个块:
if(a==2){
"block!"
}
这是一个块:
for(;;){
"block!"
}
可能吗?我从来没有见过任何关于这个主题的东西。这有可能在 es6 中实现吗?
这对回调来说很棒,它可以让你这样做:
foo{
...
}
而不是这个:
foo(function(){
...
}
我想你会喜欢鲁比的。
但是不,在 JavaScript 中没有办法做到这一点,而且我还没有听说过任何类似的 es6 功能。
您可以使用标签在 JavaScript 中创建块,但它们只有在您想使用它们时才有用,break
因为 afaik您不能对它们做任何其他事情并且它们没有自己的范围(除了let
)。
foo: {
// this is a block
console.log(1);
break foo;
console.log(2); // never logged
}
据我所知,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
如果块在函数或循环内。