八、JS中常见的面试题

一、break和continue

break:退出switch或循环语句,不能用于if语句,执行break,会立即终止离它最近的循环语句。可以为循环语句加上label标签,来标识当前循环,在break后跟上label名 ,break就会结束指定的循环,而不是最近的。

continue:不能用于if语句,跳过当次循环,只对最近的循环产生影响,同样也可以使用label标签

break:终止当前循环,continue:跳过当次循环

二、Object对象

1)基本数据类型都是单一的值,值与值之间没有任何联系,使用基本数据类型的数据,所创建的变量都是独立的,不能成为一个整体,无法表示一个人的基本信息(姓名,年龄,身份证号码,电话号码)。对象是一种复合数据类型,对象有3类:

1、内建对象:由ES标准定义的对象,在任何ES实现中都可以使用,如:Math、String、Boolean、Function、Object、数组(Array)也是一个对象、正则表达式

2、宿主对象:由JS运行环境提供的对象,主要指浏览器提供的对象,如:DOM(console、document)、BOM

3、自定义对象

var  obj = new Object();

var obj = {};//对象字面量

在读取定义了但是没有赋值的基本数据类型时,输出是Undefined;在读取对象【obj.name,obj[name]】没定义的属性时也是Undefined不是报错。

删除对象的属性,使用运算符delete,delete obj.name

三、函数

1、函数参数

形参:声明形参相当于在函数内部定义了该变量,var a;var b;

实参:在调用函数时实参会将值赋值给形参,实参可以是任意数据类型,调用函数时解析器不会检查实参的类型,需要注意是否可能会接收到非法的参数,如果可能接收到非法参数需要对参数类型进行检查;调用函数时解析器也不会检查实参的个数,多余的实参不会被赋值,当实参个数小于形成时,,没有对应实参的形参将是undefined

当函数的形参个数较多时,在传参数的时候会发生混乱,可以将参数封装到对象中,通过对象来调用。实参可以是对象也可以是函数。在开发中,将匿名函数作为实参传递给一个函数

2、函数返回值:可以将表达式作为return函数返回值,return后的值会作为执行结果返回,在函数中return后的语句都不会执 行;return后面不跟任何值或undefined(返回为空或Undefined,函数的返回值为undefined),函数中不写retuen也会返回undefined;函数的返回值可以是任意数据类型包括null,也可以是对象、函数。

3、立即执行函数,只会执行一次没有变量来保存

(function(){})()

匿名函数在执行完毕就会被立刻销毁,

4、函数的方法

对象的属性可以是任意数据类型,包含函数,如果一个函数作为一个对象的属性保存,则称这个函数为对象的方法。

5、枚举对象中的属性

在开发中我们会经常遇到,使用别人给我们定义好的对象,由于代码不是我们写的,我们并不知道这个对象有哪些属性和方法就可以通过for  ……in……来枚举对象的属性  每次执行时,会将对象中的一个属性名赋值给变量。n在这是个形式,可以是a或其他的,

四、全局作用域和函数作用域scope

全局作用域:在页面打开时创建,在页面关闭时销毁,全局作用域有一个window对象代表浏览器的窗口,由浏览器创建,可以直接使用。在全局作用域创建变量都会作为window对象的属性保存,在全局作用域创建的函数都会作为window对象的方法保存。全局变量在页面的任意部分都可以被访问到。

函数作用域:调用函数时创建函数作用域,函数执行完毕时销毁函数作用域,每调用一次函数就会创建一个函数作用域他们之间是像话独立的,在全局作用域中无法访问到函数作用域中的变量,当在函数作用中操作一个变量时,会先在函数作用域中寻找,有就使用,没有的话就去上一级作用域中寻找,如果在全局作用域中找不到则会报错。如果函数里面有变量a,全局也有变量a,想要在函数中访问全局的变量a,则应该window.a。在函数作用域中,使用var声明的变量会在函数中所有代码执行前声明。在函数中不使用var声明的变量会成为全局变量(对全局变量进行修改),定义形参就相当于在函数作用域中声明了变量。

当我们在全局作用域中没有使用关键字var来定义变量时,就相当于window.变量,但是这个没有定义的变量必须先写,再使用;使用var关键字会变量提前声明,不是用var就不会提前声明就会报错。

变量声明提前:使用var声明的变量会在所有的代码执行前被声明但不会赋值,但变量不用var关键字定义就不会被提前声明。在函数中不使用var声明的变量会成为全局变量(对全局变量进行修改),

函数声明提前:使用函数声明形式创建的函数function 函数(){}会在所有的代码执行前被创建,可以在函数声明前调用,使用函数表达式创建的函数,不会被声明提前,不能在声明前调用

五、垃圾回收GC

程序运行过程中会产生垃圾,这些垃圾过多以后,就会导致出现运行速度过慢,所以我们需要一个垃圾回收机制,来处理程序运行过程中产生的垃圾。没有任何属性/变量去保存对象的引用,这个对象就不能再操作l。这种对象过多会占据大量内存空间,导致程序运行变慢。在JS中用于自动的垃圾回收机制,会自动将这些垃圾进行回收,我们没办法主动去回收。不同浏览器有不同的回收机制。我们需要做的就是将不再使用的对象设置为null。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值