创建“最短路径”;新功能“;javascript中的别名

创建“最短路径”;新功能“;javascript中的别名,javascript,function,alias,Javascript,Function,Alias,创建“新函数”别名的最短方法(字符)是什么 基本上,这是为了代码高尔夫和缩小代码超越理性。 所以当你通常会写: a=function(a,b,c){return a+b+c;} 您可以编写如下内容(也可以使用全局变量R抽象返回关键字): (不确定第二个是否可行。) 对于第一个例子,我想到的最好的例子是: $=function(a,b){return new Function(a,"R=0;"+b+";return R")} 两种大小(用法、声明)都很重要,但用法大小更重要。对于简单表达式,可

创建“新函数”别名的最短方法(字符)是什么

基本上,这是为了代码高尔夫和缩小代码超越理性。 所以当你通常会写:

a=function(a,b,c){return a+b+c;}
您可以编写如下内容(也可以使用全局变量R抽象返回关键字):

(不确定第二个是否可行。)

对于第一个例子,我想到的最好的例子是:

$=function(a,b){return new Function(a,"R=0;"+b+";return R")}

两种大小(用法、声明)都很重要,但用法大小更重要。

对于简单表达式,可以使用:

function L(a,x){return new Function(a,'return '+x)}
用法:

n=L('a,b,c','a+b+c');

这是一个开销较大但每个函数定义保存一个字符的变体。 “@”将替换为“return”


我不认为
new Function()
对大多数函数都有用,即使没有性能问题,因为与
Function(){}
不同,没有创建闭包。编译后的函数只能访问自己的局部作用域和全局对象。想一想。没有闭包的Javascript就像没有类的Java或没有指针的C。显然,一切都会破裂

无论如何,如果您只打算将此别名用于不需要clousers的类似lambada的短表达式,那么一个明显的方法就是省去参数。简单地假设
a=arguments[0];b=参数[1]

$=function(b){return new Function('a,b,c,d,e,f,g,h,i,j', b);};
另一种方法是自动返回最后一个表达式的值,而不需要显式声明它

$=function(body) {
  return function(a,b,c,d,e,f,g,h,i,j) { return eval(body); };
};
太可怕了,不是吗?这是因为它返回上一个计算表达式的值。不需要
返回
。当然,这种方法对性能的影响更大,因为每次调用函数时都会重新计算
body
中的代码,而使用
new function
时,代码只编译(或应该编译)一次

不管怎样,性能可能会受到阻碍,使用前面的方法,函数声明就到此为止

var myeyes = $('a+b+c');
alert(myeyes(1,2,3)); //6
珀迪,嗯?不过,我认为这样看起来会更好

'a+b+c'
看起来像一根绳子是吗?嗯……这是一个刺痛,但在正确的函数手中,它可以被当作一个完整的函数来计算

//Lets just assume that IE does not exist mmkay?
var funcs = ['map', 'filter', 'every', 'some'];
for (var i=0; i<funcs.length; i++) {
   (function() {
      //Store original function
      var name = funcs[i] 
      var _super = Array.prototype[name];
      Array.prototype[name] = function() {
        //$ !== jQuery
        if (typeof arguments[0] == 'string') arguments[0] = $(arguments[0]);

        return _super.apply(this, arguments);
      };
    }());
 }
而不是

[1,2,3,4,5].map(function(a){return a*a;});
这甚至比Firefox的表达式闭包更好

[1,2,3,4,5].map(function(a) a*a);
在这里尝试一下:


如果我们真的可以编写这样的函数表达式而不调用eval monster就好了。实际上,我对Javascript语法的一个主要不满是在代码中要求垃圾邮件
function(){}
。某种速记函数文字语法(不是前面提到的半自动表达式闭包)被解释为与常规详细函数文字相同,这将大大有助于使我的代码看起来不那么荒谬。这也可能有助于缩小一小部分。

你可能会从一些愚蠢的事情中得到启发,比如:

eval("t=Fa+b};t(1,2)".replace("F", "function(a,b){return "))

您的代码:
a=函数(a,b,c){返回a+b+c;}

缩短代码:
a=(a,b,c)=>a+b+c

js中最短的函数声明可能是4个字符


示例:
执行时间如何?任何包含额外解释过程的操作(比如您的示例,因为您的函数是字符串)都可能需要花费大量时间。如此之多以至于你破坏了下载时间的增加(可能是几到几十毫秒)。与其说是试图从中获得真正的好处,不如说是试图最小化字符。@egon:你想最小化哪一个,
a=$(“a,b,c”,“R=a+b+c”)
部分还是
$=function(a,b){return new function(a,R=0;“+b+”;“return R”)}
部分还是全部?@Anurag类型在JavaScript中很少起作用。@egon,BTW,您可以使用
函数
构造函数(为您节省4个字符),这是用于吗?:)
[1,2,3,4,5].map(function(a){return a*a;});
[1,2,3,4,5].map(function(a) a*a);
eval("t=Fa+b};t(1,2)".replace("F", "function(a,b){return "))