2

我想知道是否可以执行以下操作:

var f = function;

而不是f像使用 jsfunction关键字一样使用

如果这样的事情是可能的,我会用它来最小化 js 代码,因为我的代码中有很多功能

4

4 回答 4

3

与 Pointy 在评论中指出的类似,您可以做的是使用函数构造函数创建一个新函数并将其作为字符串传递。换句话说:

function f(s) { return new Function(s) };
var foo = f('var s = "hello"; return s');
alert(foo()); //=> "hello"

但同样,我认为这是不必要的。

编辑:要添加参数,您将使用该arguments对象。

function f() {
  var args = Array.prototype.slice.call(arguments);
  var func = args.pop();
  return new Function(args.join(','), func);
}

var add = f('a,b', 'return a + b');
于 2012-10-30T22:12:22.297 回答
2

不可能按照你描述的那样做。

我能想到的最接近的是制作一个用于生成函数的函数,使用 eval 来解析传递的字符串。然而,使用 eval 通常是邪恶的,应该避免。总的来说,我不建议做这样的事情。

此外,值得注意的是,做你想做的事没有什么意义,因为通过网络发送的 javascript 应该首先被压缩,所以无论单词有多长,单词 function 都将由一个标记表示。

如果您希望您的源代码更具可读性和简洁性,我会推荐可编译为 javascript 的咖啡脚本,并允许您在不使用函数的第一个字母的情况下定义函数。Chuck Norris 会同意的!

结论和建议摘要

  • 使用咖啡脚本来获取免费源代码
  • 将其编译为您从未看过的详细 javascript
  • 缩小那个javascript(uglify是一个很棒的压缩器,或者google的关闭)
  • gzip 它(将很好地压缩重复的字符串)
  • 发送

这里的关键问题是压缩后,单词的大小function变得无关紧要,因此唯一剩下的问题是源代码的可读性。

于 2012-10-30T22:05:46.863 回答
1

是的...老实说,我不会担心尝试将函数关键字缩短为“f”,这会给您的工作带来很少的回报,而且还会损害代码的可读性。而且,除非你有类似一百万个函数,否则我不会专注于此。正如@prodigitalson 所说 - 通过缩小器运行它。这应该考虑到代码中可能的真正缩小,并且仍然保持代码库的可读性(这比节省几个字节更重要)。

另外,根据我的评论,有一些东西(可能)正在取代长的“功能”关键字(布伦丹·艾希(Brendan Eich)说过他会考虑改变 - 你必须记住他在 10 天左右设计了语言) . 在这里阅读更多相关信息:Fat Arrow Syntax当然,这类事情总是可以改变的……但是标准定义机构正在研究它。

于 2012-10-30T22:07:57.213 回答
0

您可以使用http://sweetjs.org/的卫生宏功能来做到这一点

于 2012-10-30T22:15:09.600 回答