javascript - 在 javascript 中创建 "new function"别名的最短方法

标签 javascript function alias

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

基本上这是为了代码高尔夫和超出合理范围的缩小代码。 所以当你通常会写:

a=function(a,b,c){return a+b+c;}

你可以这样写(也让我们用全局变量 R 抽象 return 关键字):

a=$("a,b,c","R=a+b+c")
a=$(a,b,c){R=a+b+c}

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

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

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

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

最佳答案

我认为 new Function() 对大多数函数都没有可行性,即使不考虑性能问题也是如此,因为与 function() {} 不同,不会创建闭包。编译函数将只能访问它自己的本地范围和全局对象。这点考虑一下吧。没有闭包的 Javascript 就像没有类的 Java 或没有指针的 C。显然一切都会崩溃。

无论如何,如果您只打算将此别名用于不需要 clousers 的短 lambada 表达式,使事情变得更简洁的一种明显方法是取消参数 deceleration。简单地假设 a = arguments[0]; b = arguments[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); };
};

是不是很可怕?这是有效的,因为 eval()...它返回最后计算的表达式的值。无需返回。当然,这种方法对性能的影响更大,因为每次调用函数时都会重新计算 body 中的代码,而对于 new Function 代码是(或应该be) 只编译一次。

无论如何,性能都被破坏了,使用之前的方法,你的函数声明就这样

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('a*a');

代替

[1,2,3,4,5].map(function(a){return a*a;});

这比 Firefox 的表达式闭包还要好

[1,2,3,4,5].map(function(a) a*a);

在这里试试: http://jsbin.com/iyogu3/edit

要是我们真的可以在不调用 eval 怪物的情况下编写这样的函数表达式就好了。实际上,我对 Javascript 语法的主要提示之一是要求在整个代码中使用垃圾邮件 function(){}。某种被解释为与常规冗长函数文字相同的速记函数文字语法(不是前面提到的半评估表达式闭包)将大大有助于使我的代码看起来不那么荒谬。它也可能有助于缩小微小的部分

关于javascript - 在 javascript 中创建 "new function"别名的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431579/

相关文章:

SQLite 表别名影响查询性能

javascript - 在对象为 bool 值的情况下,Javascript 中的类型强制如何进行?

javascript - 我的 javascript 书签什么也没做,我哪里搞砸了?

c++ - 我正在创建一个函数类型程序,并且不会停止说 : (. text+0xe0): undefined reference to

python - 类对象赋值时不规则

c++ - 无法从模板类调用通用 std::function 成员

swift - 需要澄清 Swift 中的类型别名语法

apache - Apache禁止使用Alias 403

javascript - 基于元素数量的 JQuery/JS 多页

javascript - 判断浏览器是否支持打印