本文共 694 字,大约阅读时间需要 2 分钟。
今天在网上做到一道面试题,代码如下:
var f = function g() { return 23; };typeof g();
问:以上代码的输出结果是()
A “number” B “undefined” C “function” D Error
我第一反应选择的答案是A/C。然而正确答案是D
于是乎,我非常郁闷,就在自己的编译器上输入代码,亲自测试答案的正确性:
结果如下:
原来编译器真的是报错,上网查了查,才发现其中的奥秘。
在 JS 里,声明函数只有 2 种方法: 第 1 种: function foo(){…} (函数声明) 第 2 种: var foo= function(){…} (等号后面必须是匿名函数,这句实质是函数表达式)
除此之外,类似于 var foo = function bar(){…} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。
好奇的我又试了试另外几个函数表达法的返回值,结果如下:
var f=function g() { return 23;}console.log(typeof g());//errorconsole.log(typeof g);//undefinedconsole.log(typeof f);//functionconsole.log(typeof f());//number
输出如下:
由以上结果可知:typeof f 是指返回 f 的类型typeof f() 则是指返回 f() 执行结果的类型。