我在互联网上找到了这个很棒的片段:
function f(a,b,c,d){for(d?d=b.toUpperCase():b=4;!d&&b--;d=(d=d.replace(/-(.)/g,f))in(new Image).style&&d)d=[['Moz-','Webkit-','Ms-','O-'][b]]+a;return d}
它采用css属性的名称,并自动添加正确的供应商前缀。
我把它打了一小块以使其变小:
function f(a,b,c){for(c?c=b.toUpperCase():b=4;!c&&b--;c=(c=c.replace(/-(.)/,f))in(new Image).style&&c)c=["Moz-","Webkit-","Ms-","O-"][b]+a;return c}
我想将它提交到140bytes,但是这个函数调用自身,这意味着它用变量(f)污染全局命名空间
如何更改它以便它不会自行调用?
这是一个jsfiddle:http://jsfiddle.net/vCkew/
答案 0 :(得分:0)
使用一些范围界定:
var myFunction = function(a, b, c) {
var f = function(a, b, c) {
for (c ? c = b.toUpperCase() : b = 4; !c && b--; c = (c = c.replace(/-(.)/, f)) in (new Image).style && c)
c = ["Moz-", "Webkit-", "Ms-", "O-"][b] + a;
return c;
}
return f(a, b, c);
}
答案 1 :(得分:0)
您可以使用arguments
关键字来获取该功能:
function(a,b,c){for(c?c=b.toUpperCase():b=4;!c&&b--;c=(c=c.replace(/-(.)/,arguments.callee))in(new Image).style&&c)c=["Moz-","Webkit-","Ms-","O-"][b]+a;return c}
让它在你的jsfiddle中起作用:
document.write((function(a,b,c){for(c?c=b.toUpperCase():b=4;!c&&b--;c=(c=c.replace(/-(.)/,arguments.callee))in(new Image).style&&c)c=["Moz-","Webkit-","Ms-","O-"][b]+a;return c})('transition'));
注意:这实际上回答了你的问题,使函数不调用自身,但它确实从全局命名空间中删除了函数。