我目前正在编写一些代码,这些代码包装了用户编写的JavaScript函数,并且遇到了逻辑上的一个问题,如果有问题的函数从不返回值,即永不评估return关键字,我想触发特定行为。

目前,我假设如果一个函数返回undefined,则它没有返回,但是严格来说这不是真的-由于事实是函数始终可以return undefined或返回未定义属性的值。

通过函数调用,您始终可以知道由于arguments.length属性而使用了多少个参数,我想知道是否有人知道函数返回值的类似技巧?

因此,可以分辨出ab甚至c的返回值之间的差异

var a = function(){  };
var b = function(){ return undefined; };
var c = function(){ if(1){}else{return undefined;}; };

最佳答案

不,您不能可靠地跨浏览器,通过使用没有值的return或使用return undefined来判断返回的函数是刚到达其代码的末尾。规范的Section 13.2.1对此进行了介绍。

这里的另一个答案建议您可以通过分析函数的源代码来做到这一点。但是,没有这样做的标准机制。尽管几乎所有的浏览器都可以从Function#toString获得某种形式的源,但有些浏览器却没有(大多数是移动浏览器),并且该规范未对其进行定义。但是,如果您拥有一组支持的浏览器,并且都具有浏览器,那将是您唯一的选择-但是即使那样,您也不一定知道函数中采用了哪个代码分支。

09-17 18:50
查看更多