JavaScript之函数定义以及类型

简介: 今天在网上做到一道面试题,代码如下:var f = function g() { return 23; };typeof g();问:以上代码的输出结果是() A “number” B “undefined” C “function” D Error我第一反应选择的答案是A/C。

今天在网上做到一道面试题,代码如下:

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());//error

console.log(typeof g);//undefined

console.log(typeof f);//function

console.log(typeof f());//number

这里写图片描述

输出如下:

这里写图片描述

由以上结果可知:typeof f 是指返回 f 的类型typeof f() 则是指返回 f() 执行结果的类型。

相关文章
|
23天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
23天前
|
JavaScript
常见函数的4种类型(js的问题)
常见函数的4种类型(js的问题)
11 0
|
23天前
|
JavaScript
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
写一个函数将N组<>(包含开始和结束),进行组合,并输出组合结果 (js)
9 0
|
1月前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=>`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
18 5
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
42 0
|
1月前
|
JavaScript 前端开发 网络架构
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
JavaScript 谈谈对箭头函数的理解及其与普通函数的区别。
18 1
|
1月前
|
前端开发 JavaScript 数据处理
在JavaScript中,什么是异步函数执行的例子
在JavaScript中,什么是异步函数执行的例子
10 0
|
1月前
|
JavaScript
JS封装节流函数
JS封装节流函数
15 0
|
25天前
|
JavaScript 前端开发
JavaScript 中如何检测一个变量是一个 String 类型?
JavaScript 中如何检测一个变量是一个 String 类型?
21 2
|
1月前
|
JavaScript 前端开发
JavaScript函数科里化
JavaScript函数科里化