Javascript 函数声明类型与函数表达式类型
在声明函数或将函数定义为变量赋值时,使用typeof函数会遇到一些令人困惑的问题。下面是一个示例代码:Javascript 函数声明类型与函数表达式类型,javascript,node.js,Javascript,Node.js,在声明函数或将函数定义为变量赋值时,使用typeof函数会遇到一些令人困惑的问题。下面是一个示例代码: //This displays "undefined" console.log(typeof window['a']); //This displays "function" console.log(typeof window['b']); function a() {}; b = function() {}; 编辑:这与吊装无
//This displays "undefined"
console.log(typeof window['a']);
//This displays "function"
console.log(typeof window['b']);
function a() {};
b = function() {};
编辑:这与吊装无关。我添加了以下等效的Node.js代码,该代码已完成,因此对程序中的其他内容没有疑问:
function a() {};
b = function() {};
console.log(typeof global['a']);
console.log(typeof global['b']);
输出为:
undefined
function
有人能根据上述更新解释为什么声明的函数在全局/窗口对象中没有条目吗
这不是重复的。当函数被声明为函数或变量赋值时,其他问题没有解决有关typeof返回值的具体问题。
功能减速
当您定义一个函数时,它将被提升(不仅是名称,还包括它的定义),您甚至可以在编译器到达(在执行上下文期间)定义它的行之前访问它
函数表达式
定义函数表达式时,变量将被提升,其值为undefined
,只有在定义该变量的行之后(在执行上下文期间),才能访问该函数
console.log(窗口类型['a']);
console.log(窗口类型['b']);
函数a(){返回'a'};
b=函数(){return'b'}代码>这是函数声明
与函数表达式
的一种情况
功能声明
声明的函数“保存以备将来使用”,并将在稍后调用(调用)时执行。
正如变量声明必须以“var”开头一样,函数声明也必须以“Function”开头
function a() {...};
这就是为什么typeof a返回未定义的,
,因为它还没有被使用
函数表达式
函数表达式可以存储在变量中:
b = function {...};
函数表达式存储在变量中后,该变量可以用作函数。存储在变量中的函数不需要函数名。它们总是使用变量名调用(调用)
当您执行typeof b
:它作为函数
,因为它已经存储在窗口变量中
有关详细信息,您可以阅读此这称为提升:无法复制。@Jonaswillms请参阅更新。这是重复的,提升确实解释了这种行为。至于为什么你的第二个代码片段不起作用,那是一个单独的问题:a
不是一个全局变量-请看。现在你混合了更多的东西<代码>全局
和窗口
有根本的不同。我仍然无法重现你的第一个例子。但是,这不是与OP报告的相反吗。他们说他们得到了提升函数名的未定义的。@code-Maniac请查看我的update@RTC现在这是完全不同于原来发布的一个,因为bergi已经提供了一个dup目标,请参阅我的更新