专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

前端面试系列——JS面试题 前端面试js编程题

ins518 2024-10-05 20:31:21 技术文章 11 ℃ 0 评论

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。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表