var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};上面的示例,创建了一个包括单独成员”bindings”的对象,此成员包括一个含有三个对象(”ircEvent”, “method”, 与 “regex”)的数组成员可以通过.或者下标操作符检索。myJSONObject.bindings[0].method // "newURI"为了将JSON文本转换为对象,可以使用eval()函数。eval()函数调用JavaScript编辑器。由于JSON是JavaScript 的子集,因此编译器将正确的解析文本并产生对象结构。文本必须括在括号中避免产生JavaScript的语法歧义。var myObject = eval('(' + myJSONtext + ')');
这一段是从JSON官方剪来的,最后一段的大意就是用eval()读取JSON,但我想知道为什么使用eval()读取时,要在JSON的外面再加一层括号var myObject = eval('(' + myJSONtext + ')');
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};上面的示例,创建了一个包括单独成员”bindings”的对象,此成员包括一个含有三个对象(”ircEvent”, “method”, 与 “regex”)的数组成员可以通过.或者下标操作符检索。myJSONObject.bindings[0].method // "newURI"为了将JSON文本转换为对象,可以使用eval()函数。eval()函数调用JavaScript编辑器。由于JSON是JavaScript 的子集,因此编译器将正确的解析文本并产生对象结构。文本必须括在括号中避免产生JavaScript的语法歧义。var myObject = eval('(' + myJSONtext + ')');
这一段是从JSON官方剪来的,最后一段的大意就是用eval()读取JSON,但我想知道为什么使用eval()读取时,要在JSON的外面再加一层括号var myObject = eval('(' + myJSONtext + ')');
它里面有段代码是这么写的
if (!this.JSON) {
this.JSON = {};
}(function () {
……略去此处无用代码……}());
请问为什么function ()函数外要加括号?也就是为什么是(function ())这种样子?
还有就是为什么这个函数没有名字?这样为什么会成立呢?
为什么不是function AA()或是var AA = function ()呢?
谢谢
if (!this.JSON) {
this.JSON = {};
}(function () {
……略去此处无用代码……}());
这种(function () {……}()); 表示形式是什么含义呢?用法是怎么样的?
谢谢回答
同样如果其中的语句是定义函数的话,那么 (定义匿名函数语句)先执行,然后再调用上述函数 fun(),
(function(){})() 相当于 var fun = function(){} 然后 fun();在 eval('(' + "{a:b}" + ')'); 中,如果不加中间的()
就变成 eval("{a:b}"),相当于执行语句{a:b},执行该语句并没有意义,
要么就写成 eval("var obj = {a:b}"), 执行该语句就是为对象赋值
要么就加(),让({a:b})作一次运算返回得到对象.
var a = eval("{a:'aaa'}");
var b = eval("(" + "{b:'bbb'}" + ")");
window.alert(a.a);
window.alert(b.b);谢谢4楼,自己又写了个小例子就完全明白了!!