首页 > 解决方案 > 匿名函数名称未显示

问题描述

当我如下定义一个函数时,我能够检索函数的名称和参数。

    let func = function(arg1, arg2){
    	console.log("I am a function");
    }
    console.log("Function name : " + func.name);
    console.log("No of parameters : " + func.length);

但是,如果我使用另一个函数来检索变量中的匿名函数,则函数名称将显示为空字符串。

let func = function(){
    	return function(arg1, arg2, arg3){
    		console.log("Nested anonymous function");
    	};
    }
    let func1 = func();
    console.log("Function name : " + func1.name); // "func1" expected
    console.log("No of parameters : " + func1.length);

所以我怀疑在这两种情况下,匿名函数都被分配给了某个变量。但在第一种情况下,它将变量的名称作为函数的名称。但在第二种情况下,它没有。这种特殊行为的原因是什么?

标签: javascript

解决方案


变量和方法可以从其语法位置推断出匿名函数的名称(ECMAScript 2015 中的新功能)。

let f = function() {};
let object = {
  someMethod: function() {}
};

console.log(f.name); // "f"
console.log(object.someMethod.name); // "someMethod"

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#Inferred_function_names

注意重点:一个名字可以从它的句法位置推断出来。意思是,如果该函数出现在源代码中并带有一个让引擎推断名称的左侧表达式,它就会这样做。但是,在您的情况下,左侧是return,它不允许推断任何名称。Javascript不会通过从函数返回并在调用者的某个位置分配来跟踪它,因此您的匿名函数保持匿名。


推荐阅读