刚才发现了一个很奇怪的问题: 在定义带花括号的变量时(比如function () {} 或者对象{}),其后面跟一个这样的匿名函数竟然会报错:
var a = {}
(function () {
console.log('OK');
})();
出错信息:
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: object is not a function
at Object.CALL_NON_FUNCTION (native)
at Object.<anonymous> (f:\github\Liquid.js\test\b.js:2:10)
at Module._compile (module.js:441:26)
at Object..js (module.js:459:10)
at Module.load (module.js:348:31)
at Function._load (module.js:308:12)
at Array.0 (module.js:479:10)
at EventEmitter._tickCallback (node.js:192:40)
加了个分号就正常了:
var a = {};
(function () {
console.log('OK');
})();
求大神们解释
回复 (8)
F
学习了
Y
前端最基本的规范
X
a = {}
(function() {})()
等价于
a = {}(function(){})();
这里解释器试图去将{}当作一个函数去调用,所以会出错。
关于分号解析规则可以参考 ecma-262 标准中的第 7.9.1 节——Rules of Automatic Semicolon Insertion
D
现在学习JavaScript中,其中一个头痛就是在(函数)哪加分号哪里不加...
N
表达式后面加分号,定义后面不需要;
比如
function test(){ }
这个不需要
但是如果这样
var a = function test(){}; 那么就要加分号,否则
var a = function(foo){return foo;}
(1);
console.log(a) // 1
R
X
引用 xqunixa = {} (function() {})() 等价于 a = {}(function(){})(); 这里解释器试图去将{}当作一个函数去调用,所以会出错。 关于分号解析规则可以参考 ec...
@rabby 嗯,我感觉没事的时候读读语言标准文档会很有收获。
D
不推荐不加分号。
参与回复
登录后即可参与回复。登录