javascript – 使用逗号运算符链接多个函数定义
作者:互联网
我正在看看Uglify-js的源代码,我注意到了一些有趣的东西.在bin / uglifyjs(ref)中,有两个函数定义如下:
//syntax A
var defsym = function(sym) {
...
},
defval = function(v) {
...
};
考虑到Uglify-js是由专业人士编写的,并且在许多产品(如JQuery)中使用,我不明白为什么代码不是这样编写的:
//syntax B
var defsym = function(sym) {
...
};
var defval = function(v) {
...
};
这将更清楚地表明这是两个局部变量.或者这个怎么样:
//syntax C
function defsym(sym) {
...
}
function defval(v) {
...
}
这个使得defsym和defval函数可以在母函数的整个范围内使用.
他们为什么会选择第一种语法?为什么不用其他语法?
解决方法:
他们为什么不使用语法B?因为它需要更多的字符.
他们为什么不使用Syntax C?因为它的含义并不完全相同.函数声明与函数表达式不完全相同.
现在我看到分配是在try / catch中进行的,这意味着它们处于一个块中.
在块中声明函数是无效的(即使某些实现允许它).
// Invalid
try {
function defsym(sym) {
// ...
}
// ...
} catch(e) {
// ...
}
// Valid
try {
var defsym = function(sym) {
// ...
},
// ...
} catch(e) {
// ...
}
这就解释了为什么他们没有选择语法C.
此外,“严格模式”将通过抛出错误绝对禁止此类无效声明.
标签:javascript,uglifyjs 来源: https://codeday.me/bug/20190718/1494316.html