1
如果我這樣做:爲什麼JS的eval()返回一個對象的唯一值
var x = eval('{a:"b"});
console.log(x); // -> "b"
我得到的是對象(「B」)的值,而不是鍵/屬性,或整個對象本身很奇怪。
,但是當我這樣做:現在
var x = eval('(function self(){return {a:"b"}})()');
console.log('x'); // -> {a:'b'}
似乎給我什麼,我所期望的,整個對象。但爲什麼呢?爲什麼我需要將它封裝在一個(自動執行)函數中?
我想用eval從字符串創建一些對象,但需要更好地瞭解它是如何工作的。
我猜JS規範將{}定義爲「代碼塊」,但這在常規JS代碼中很少見到 - 「代碼塊」的外觀是什麼?通常一個代碼塊只在一個函數的上下文中。 –
@AlexanderMills你總是看到塊'if(true){...}' - 這是一個代碼塊。很多東西都接受單一語句作爲「操作數」,這就是塊作爲多個語句的「容器」的地方。 – zerkms
@AlexanderMills:這不是非常罕見的代碼塊,你可以在if,for,while等代碼塊中使用代碼塊。它是非常少見且幾乎從不使用的標籤 – slebetman