2013-01-22 42 views
1

我知道這是一個愚蠢的問題。 是否有可能在javascript中創建自定義塊? 這是塊:自定義塊JavaScript?

if(a==2){ 
    "block!" 
} 

這是塊:

for(;;){ 
    "block!" 
} 

這可能嗎?我從來沒有見過這個題目。這有可能在es6中實現嗎?

這將是巨大的回調,這將讓你做到這一點:

foo{ 
    ... 
} 

取而代之的是:

foo(function(){ 
    ... 
} 
+1

回調基本上是一個函數表達式作爲參數傳遞給參考,我不認爲你能夠引用一個「塊」,否則。 –

回答

0

我想你會喜歡紅寶石。

但是,沒有辦法在JavaScript中做到這一點,我還沒有聽說過任何類似的es6功能。

0

您可以使用標籤在JavaScript中創建塊,但只有在您希望將break作爲afaik you can't do anything else with them且它們沒有自己的作用域(let除外)時,它們纔有用。

foo: { 
    // this is a block 
    console.log(1); 
    break foo; 
    console.log(2); // never logged 
} 
+0

哪個更好,在一個函數中使用一個塊作用域,並使用'break;'或者使用一個普通的函數,然後做一個'return;'? – CMCDragonkai

+0

我在這裏描述的標籤塊與_function_不同; _函數_在_JavaScript_中有很大的開銷。您所做的調用越少,通常代碼效率就越高。 –

0

據我所知,JavaScript的只有功能範圍,全球範圍內並沒有塊範圍就像C.所以目前你不能做到這一點。如果你想要一個塊,你必須把它包裝在一個函數中,你已經列出了。

0

我已經看到了這一招使用,讓你一個塊與它自己的範圍爲變量的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語句性能方面的考慮,但它是有用的,因爲它仍然允許如果塊位於函數或循環中,則使用returnbreak