Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

函数定义方式与其字符串

  传统的函数定义都是以function关键字开头,后面跟上函数名(省略函数名为匿名函数)。但ES6之后就不再如此了。Generators也属于函数,它的格式中function关键字后面就多了个星号。还有ArrowFunctions,它甚至连function关键字都没有了。
  函数的定义代码在扩展,函数转换成字符串时的格式也会被扩展。需要操作函数字符串的程序也得考虑相关的情况。

  假如要从传入的函数中获取其函数体,也许会有这样的代码(请使用Firefox测试)
<script>
//用于取函数体字符串的函数(不考虑注释)
function getFunctionBody(f){
  return (f+"").match(/\{([\s\S]*)\}/)[1];
};

//对于一般的函数,取函数体是没问题的
console.log(getFunctionBody(function(){return 123;}));

//传入bind过的函数或内置函数会得到不可执行的代码
console.log(getFunctionBody((function(){}).bind()));

//传入ArrowFunctions即错误
//因为ArrowFunctions的函数体不在大括号中
console.log(getFunctionBody(()=>123));
</script>

  随着编程语言的发展,开发者要考虑的问题就越来越多。代码是需要随着时代更新的,就像前段时间刚升级到Chrome36的时候之前所有带webkit前缀的createShadowRoot方法一夜之间就不能用了。所以说,程序要是不更新就会这样一点点的死掉。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^