网站首页 > 技术文章 正文
js面试题
1.闭包程序分析2.JS中有几种函数3.创建函数的几种方式- 声明函数- 创建匿名函数表达式- 创建具名函数表达式- Function构造函数- 自执行函数- 其他创建函数的方法4.下面代码的输出是什么?
1.闭包程序分析
1function fun(n,o) {
2 console.log(o)
3 return {
4 fun:function(m){
5 return fun(m,n);
6 }
7 };
8}
9var a = fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,?,?,?
10var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
11var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,?,?,?
12//问:三行a,b,c的输出分别是什么?
13
14//答案:
15//a: undefined,0,0,0
16//b: undefined,0,1,2
17//c: undefined,0,1,1
2.JS中有几种函数
首先,在此之前需要了解的是,在JS中函数可以分为两种,具名函数(命名函数)和匿名函数。
区分这两种函数的方法非常简单,可以通过输出 fn.name 来判断,有name的就是具名函数,没有name的就是匿名函数
注意:在低版本IE上无法获取具名函数的name,会返回undefined,建议在火狐或是谷歌浏览器上测试
或是采用兼容IE的获取函数name方法来获取函数名称:
1/**
2 * 获取指定函数的函数名称(用于兼容IE)
3 * @param {Function} fun 任意函数
4 */
5function getFunctionName(fun) {
6 if (fun.name !== undefined)
7 return fun.name;
8 var ret = fun.toString();
9 ret = ret.substr('function '.length);
10 ret = ret.substr(0, ret.indexOf('('));
11 return ret;
12}
3.创建函数的几种方式
说完函数的类型,还需要了解JS中创建函数都有几种创建方法。
- 声明函数
最普通最标准的声明函数方法,包括函数名及函数体。
function fn1(){}
- 创建匿名函数表达式
创建一个变量,这个变量的内容为一个函数
var fn1=function (){}
注意采用这种方法创建的函数为匿名函数,即没有函数name
var fn1=function (){};
getFunctionName(fn1).length;//0
- 创建具名函数表达式
创建一个变量,内容为一个带有名称的函数
var fn1=function xxcanghai(){};
注意:具名函数表达式的函数名只能在创建函数内部使用
即采用此种方法创建的函数在函数外层只能使用fn1不能使用xxcanghai的函数名。xxcanghai的命名只能在创建的函数内部使用
- Function构造函数
可以给 Function 构造函数传一个函数字符串,返回包含这个字符串命令的函数,此种方法创建的是匿名函数
1 // 传统的
2 function foo () {
3 console.log( '你好' );
4 }
5 // Function
6 var func = new Function( 'console.log( "你好" );' );
7 // 功能上, 这里 foo 与 func 等价
- 自执行函数
(function(){alert(1);})();
(function fn1(){alert(1);})();
- 其他创建函数的方法
当然还有其他创建函数或执行函数的方法,这里不再多说,比如采用 eval , setTimeout , setInterval 等非常用方法,这里不做过多介绍,属于非标准方法,这里不做过多展开
4.下面代码的输出是什么?
1function sayHi() {
2 console.log(name);
3 console.log(age);
4 var name = "Lydia";
5 let age = 21;
6}
7sayHi();
A: Lydia 和 undefined
B: Lydia 和 ReferenceError
C: ReferenceError 和 21
D: undefined 和 ReferenceError
答案: D
在函数中,我们首先使用var关键字声明了name变量。这意味着变量在创建阶段会被提升(JavaScript会在创建变量创建阶段为其分配内存空间),默认值为undefined,直到我们实际执行到使用该变量的行。我们还没有为name变量赋值,所以它仍然保持undefined的值。
使用let关键字(和const)声明的变量也会存在变量提升,但与var不同,初始化没有被提升。在我们声明(初始化)它们之前,它们是不可访问的。这被称为“暂时死区”。当我们在声明变量之前尝试访问变量时,JavaScript会抛出一个ReferenceError。
猜你喜欢
- 2025-06-24 晨光微醺时!2 道 JS 核心题漫谈,解锁面试小技巧
- 2025-06-24 js基础面试题92-130道题目(50道js面试题)
- 2025-06-24 3 个高级 JavaScript 面试问题(js面试题必问)
- 2025-06-24 晨光微暖时!2 道 JS 经典面试题拆解,开启惬意学习日
- 2025-06-24 JS面试题突破:谈谈 undefined 和 null ?
- 2025-06-24 9 个你可能不知道答案的常见 JavaScript 面试题
- 2025-06-24 19个基本的JavaScript面试问题及答案(都是实用技巧)免费送
- 2025-06-24 JavaScript篇面试题(js面试题基础)
- 2024-10-05 前端面试,你有必要知道的一些JavaScript 面试题(上)
- 2024-10-05 几道看起来代码量很少的Javascript笔试题,看看你会不会做?
你 发表评论:
欢迎- 586℃几个Oracle空值处理函数 oracle处理null值的函数
- 580℃Oracle分析函数之Lag和Lead()使用
- 567℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 564℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 560℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 553℃【数据统计分析】详解Oracle分组函数之CUBE
- 539℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 533℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)