首页 > 试题广场 >

以下代码的输出结果是

[单选题]
以下代码的输出结果是
var f = function g() {
    return 23;
 };
typeof g();


  • "number"
  • "undefined"
  • "function"
  • Error
推荐
实践证明:
如果是typeof f,结果是function
如果是typeof f(),结果是number
如果是typeof g,结果是undefined.
如果是typeof g(),结果是ReferenceError,g is not defined
编辑于 2015-12-03 12:38:31 回复(15)


在 JS 里,声明函数只有 2 种方法:
第 1 种: function foo(){...} (函数声明)
第 2 种: var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)

除此之外,类似于 var foo = function bar(){...} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。

但为什么不是 "undefined"?
这里如果求 typeof g ,会返回 undefined,但求的是 g(),所以会去先去调用函数 g,这里就会直接抛出异常,所以是 Error。
发表于 2016-01-19 10:42:54 回复(33)
//首先我做对了题目;我的思路是作用域的问题。
var f = function g(){return 23;}
//可以理解为(其实并不完全相同)
function f(){
    function g(){
         return 23;
    };
};
typeof g();
//现在在看,能找到函数g吗?

发表于 2016-03-16 11:05:41 回复(4)
typeof g会返回undefined的原因是,typeof有一个特殊的安全防范机制,可以在对一个未声明的变量进行RHS查询时阻止报错,只返回undefined而不抛出异常。如果是console.log(g), 同样会有ReferenceError。而typeof g() 会先试图执行函数g(), 这时会发现函数g未声明过,就报ReferenceError。 参考:你不知道的JavaScript 上卷,中卷
发表于 2017-09-22 14:46:46 回复(0)
var f = function g() {
    console.log(typeof g);
}
f();  // 打印出 'function'
g();  // TypeError, g 为 undefined
// 综上,我们可以为匿名函数取个名字,但这个名字只有在匿名函数内部能够访问,这在进行递归操作时比较有用。

发表于 2018-01-03 16:32:24 回复(0)
// ff
typeof g(); // ReferenceError: g is not defined
typeof g; // "undefined" 

// chrome
typeof g();
/* VM112:5 Uncaught ReferenceError: g is not defined
    at <anonymous>:5:8
    at Object.InjectedScript._evaluateOn (<anonymous>:875:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:808:34)
    at Object.InjectedScript.evaluate (<anonymous>:664:21)(anonymous function) @ VM112:5InjectedScript._evaluateOn @ VM106:875InjectedScript._evaluateAndWrap @ VM106:808InjectedScript.evaluate @ VM106:664
*/
typeof g; // "undefined"

// IE9
typeof g(); // "number" 
typeof g;  // "function" 


编辑于 2016-08-02 10:25:39 回复(0)
这是个函数表达式声明,表达式中会忽略函数的名字。等于var f=func(){}
发表于 2022-07-18 23:21:35 回复(0)
前面的哥们基本都说完了,但是发现大家说的都差一点,综合一下简单总结:
1. JavaScript中声明函数的方式:
    1.1:使用function关键字声明,如:function fn(){}
    1.2:使用字面量表达式声明,如:var fn = function(){}
2. 那如果按照题目这样声明又算什么呢?
    2.1:如果按照题目这样声明:var fn = function gn(){},这样的字面量表达式等价于var fn = function(){};那么你可能会疑问,这样的话gn又去哪儿来?是直接忽略还是咋地?此时我们把fn打印出来就知道了:如下:

发表于 2021-04-21 17:52:29 回复(0)
告诉大家这个题有bug,在ie下,你们运行这段代码,结果就是number!!至于为什么会这样,求大佬解答!!
发表于 2017-12-17 15:26:17 回复(1)
测试代码
<script type="text/javascript">
    var f = function g() {
            return 23;
        };
    console.log('f - '+typeof f);
    console.log('f() - '+typeof f());
    console.log('g - '+typeof g);
    console.log('g() - '+typeof g());
</script>
测试结果
Chrome

FireFox

IE8

发表于 2016-07-25 20:21:25 回复(0)
高版本的chrom浏览器输出结果
发表于 2016-04-27 11:58:01 回复(1)
洁头像
如果是 
function g() {
        return23;
    };
typeof g();
typeof g  //function
typeof g() //number
发表于 2015-08-16 11:11:54 回复(0)
g is not undefined
发表于 2015-05-29 01:48:47 回复(1)
undefined,
g未在全局定义
发表于 2015-03-06 17:23:28 回复(1)
查了资料,做这一题需要知道js里function的2个作用;
第一种,作为大家所熟知的函数声明(就不说了)。
第二种,作为函数表达式,eg: var f = function g();   这时候  g  只是作为 当前函数的一个内部属性  f.name~


发表于 2015-12-03 10:02:22 回复(5)
/**
* 以下是我的测试结果
*/

// Editplus 3 :(编辑器的自带浏览器模式  Ctrl+B)
typeof g()    //  number
typeof g      //  function
typeof f()    //  number
typeof f      //  function

// Chrome:
typeof g()    //  无输出响应
typeof g      //  undefined
typeof f()    //  number
typeof f      //  function

// Firefox:
typeof g()    //  无输出响应
typeof g      //  undefined
typeof f()    //  number
typeof f      //  function

// IE8:
typeof g()    //  number
typeof g      //  function
typeof f()    //  number
typeof f      //  function

编辑于 2016-04-05 18:07:32 回复(5)
Chrome


IE11


firefox
发表于 2015-09-06 15:07:45 回复(1)
作为函数表达式,
var f = function g(){
};
这时候  g  只是作为 当前函数的一个内部属性。

如果是typeof f,结果是function。 因为f指向函数
如果是typeof f(),结果是number。
如果是typeof g,结果是undefined。    因为g没有声明,更没有初始化。
如果是typeof g(),结果是ReferenceError,g is not defined。  因为g不是函数,执行它会出错。
发表于 2017-06-05 22:20:18 回复(0)
使用函数表达式创建的函数属于匿名函数,所以g没有用,直接调用函数个g()也会报错,调用该函数要用f()
发表于 2016-04-12 22:29:41 回复(3)
这里的g并没有进行声明,所以:
typeof g  它会在全局找有没有g这个全局属性,没有找到所以返回undefined。
typeof g()  它会先执行g(),然而并没有声明g这个函数,方法没有找到所以会抛出Uncaught ReferenceError: g is not defined


发表于 2022-02-18 11:54:08 回复(0)
这是个函数表达式声明,表达式中会忽略函数的名字。等于var f=func(){}
发表于 2022-03-29 22:16:36 回复(0)