前端基础笔试及面试题(javaScript)

javaScript:

1、什么叫实例?

//实例:实例对象
function Persion (name,age){//构造函数,是引用类型
	this.name = name;
	this.age = age;
}
var p = new Persion('liu','18');
//p是根据类型创建的实例对象,即用new创建的对象

2、undefined 和null的区别?
*undefined 代表定义未赋值
*null 定义并赋值了,只是值为null

var a;
console.log(a);//undefined
a = null;
console.log(a);//null

3、什么时候使用null?
初始赋值为null,表明将要赋值为对象;
结束前赋值为null,对象未被调用,可以让对象成为垃圾对象。

var obj = null;//初始赋值为null,表明将要赋值为对象
obj = ['a',12];//确定对象就赋值
obj = null;//最后,未被调用的对象可以让obj指向的对象成为垃圾对象(被垃圾回收器回收)为了释放数组对象所占的内存空间

4、严格区分变量类型和数据类型?
a、数据类型:分为基本类型和对象类型;
b、变量类型:(变量内存值的类型)
分为基本类型:保存就是基本类型的数据;
引用类型:保存的是地址值。

5、typeof、instanceof、===的使用?
a typeof :可以判断undefined/数值/字符串/布尔值/function/symbol,不能判断b null与object,object与array;
instanceof :判断对象的具体类型(object,function,array);
=== :可以判断undefined,nulll。

6、数据类型?
number、string、boolean、null、undefined、object,
新增symbol:(无字面量、符号唯一、符号可作对象属性存在)
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型.
Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
Symbol函数前不能使用new命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型
参考:https://blog.csdn.net/qq_33408245/article/details/82953143

7、==、===的区别?
之前写过的https://blog.csdn.net/weixin_44019720/article/details/108966811

8、作用域及作用域链、闭包?
https://blog.csdn.net/weixin_44019720/article/details/108968096

9、this的四种绑定方法
函数中的this总指向调用它的对象。参考:https://www.jb51.net/article/121164.htm
(1) this的默认绑定:window对象
当一个函数没有明确的调用对象的时候,也就是单纯作为独立函数调用的时候,将对函数的this使用默认绑定:绑定到全局的window对象。

function fire () {
  console.log(this === window)
}
fire(); // 输出true

(2)this的隐式绑定
当函数被一个对象“包含”的时候,我们称函数的this被隐式绑定到这个对象里面了,这时候,通过this可以直接访问所绑定的对象里面的其他属性。

var obj = {
  a: 1,
  fire: function () {
   console.log(this.a)
  }
}
obj.fire(); // 输出1

在隐式绑定中,如果函数调用位置是在一串对象属性链中,this绑定的是最内层的对象。

var obj = {
  a: 1,
  obj2: {
   a: 2,
   obj3: {
    a:3,
    getA: function () {
     console.log(this.a) 
     }
   }
  }
}
obj.obj2.obj3.getA(); // 输出3

(3) this的显式绑定:(call和bind方法)
a、call的基本使用方式: fn.call(object)
fn是你调用的函数,object参数是你希望函数的this所绑定的对象。

fn.call(object)的作用:
1.即刻调用这个函数(fn);
2.调用这个函数的时候函数的this指向object对象 。

var obj = {
  a: 1, // a是定义在对象obj中的属性
  fire: function () {
  console.log(this.a)
  }
}
var a = 2; // a是定义在全局环境中的变量 
var fn = obj.fire;
var fireInGrobal = function () {
 fn.call(obj) //硬绑定
}
fireInGrobal(); // 输出1

b、如果使用bind的话会更加简单。

var fireInGrobal = function () {
 fn.call(obj) //硬绑定
}

可以简化为

var fireInGrobal = fn.bind(obj);

call和bind的区别是:在绑定this到对象参数的同时:
1.call将立即执行该函数。

2.bind不执行函数,只返回一个可供执行的函数 。

因为this的缘故:
在隐式绑定下:函数和只是暂时住在“包含对象“的旅馆里面,可能过几天就又到另一家旅馆住了。

在显式绑定下:函数将取得在“包含对象“里的永久居住权,一直都会”住在这里“。

(4)new绑定:执行new操作的时候,将创建一个新的对象,并且将构造函数的this指向所创建的新对象

function foo (a) {
  this.a = a;
}
var a1 = new foo (1);
var a2 = new foo (2);
var a3 = new foo (3);
var a4 = new foo (4);
console.log(a1.a); // 输出1
console.log(a2.a); // 输出2
console.log(a3.a); // 输出3
console.log(a4.a); // 输出4

10、new的作用
(1) 创建一个空对象;
(2) 让this指向这个新的对象;
(3) 执行构造函数里的方法,给这个新对象加属性和方法;
(4) new会返回该对象。

11、数组的Map方法
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。

12、事件的循环
一个异步过程通常是这样的:主线程发起一个异步请求,异步任务接收请求并告知主线程已收到(异步函数返回);主线程可以继续执行后面的代码,同时异步操作开始执行;执行完成后通知主线程;主线程收到通知后,执行一定的动作(调用回调函数)。
  因此,一个异步过程包括两个要素:注册函数和回调函数,其中注册函数用来发起异步过程,回调函数用来处理结果。
  参考:https://www.cnblogs.com/xiaohuochai/p/8527618.html

13、
在这里插入图片描述
函数执行顺序: ①var x; //变量声明提前
②var foo; //变量声明提前
③x=foo(); //给x赋值,会报错,因为foo变量目前是undefined,不是函数类型 ④foo=function foo() {return “foobar”;}; //给foo赋值 foo变量“被提前”了,但是他的赋值(也就是函数)并没有被提前,从这一点上来说,和前面我们所讲的变量“被提前”是完全一致的,并且,由于“被提前”的变量的默认值是 undefined。 函数声明可以被提前,但函数表达式不能被提前。

更改代码后,给foo赋值后变成函数,结果就是调用函数。

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值