js题

作者: 43e1f527c136 | 来源:发表于2022-12-01 20:32 被阅读0次

### 简答

1:如何理解原型?

    1.没创建一个对象时都会关联另一个对象,这个对象就是原型对象。创建出来的对象都会从原型中继承属性和方法。

    2.每一个对象都有一个_proto_属性。

    3.把所有对象的共用属性全存放在一个对象。然后让每一个对象的_proto_都指向这个存放共用属性的对象的地址。

    4.而这个共用属性就是原型。原型主要是为了减少不必要的内存消耗。

2:如何理解继承?

    1.继承就是对共性的属性与方法继承给另一个类。并加入私有属性和方法。使另一个类拥有这个类的属性和方法。

    2.实现代码的复用。

3:class类名中super你是怎么应用?

    1.super 当作函数使用 实参给父类中的constructor函数形参赋值的

    2.super 当作对象使用 指向父类的prototype 

4:函数的原型与普通对象的原型之间有什么关系?

    1.实例对象的原型与构造函数的原型是同一个。

5:什么是作用域链

    1.当代码执行时,会创建一个变量对象的作用域链。由当前作用域往父级作用域中寻找变量,就叫做作用域链

6:什么是闭包?闭包特点?

    闭包是由函数以及声明该函数的词法环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量(闭包维持了一个对它的词法环境的引用:在一个函数内部定义的函数,会将外部函数的活跃对象添加到自己的作用域链中)。所以可以在一个内层函数中访问到其外层函数的作用域。

    特点:

    1.防止变量污染

    2.闭包中变量没有被销毁

    3.从表面上看,函数外部可以访问内部变脸,实际上都是因为作用域和作用域链的特点实现的

7:什么是词法作用域?

    1.又称静态作用域指的是函数在声明时就确定好了访问权限

8:执行上下文中有哪些内容?

    1.创建执行上下文栈。

    2.程序执行时创建执行上下文对象,并把对象推入到执行栈中。

    3创建全局上下文实例。

    4当函数执行时回创建函数上下文实例,并将上下文推送到执行栈中。执行完毕后从执行栈中移除上下文,并销毁

    5关闭浏览器时,全局上下文销毁,执行栈销毁

9:谈谈你对执行栈的理解

    1.执行代码队列。

    2.将要执行代码推送到代码队列中。

    4.然后按顺序执行。

    5.执行完毕后会销毁相应的代码队列。

10 浏览器时间循环机制是什么?

    1.JavaScript代码的执行过程中,除了依靠函数调用栈来搞定函数的执行顺序外,还依靠任务队列(task queue)来搞定另外一些代码的执行。整个执行过程,我们称为事件循环过程。

    2.一个线程中,事件循环是唯一的,但是任务队列可以拥有多个。任务队列又分为macro-task(宏任务)与micro-task(微任务),在最新标准中,它们被分别称为task与jobs。

11 js严格模式和非严格模式区别是什么

    1.严格模式通过抛出错误来消除了一些原有静默错误。

    2.严格模式修复了一些导致 JavaScript引擎难以执行优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快。

    3.严格模式禁用了在ECMAScript的未来版本中可能会定义的一些语法。

### 函数封装题目

1:模拟map

    function map(arr, callback) {

        let les = []

        if (!arr instanceof Array) {

            throw new Error('arr not is Array')

        }

        if(!callback instanceof Function){

            throw new Error('arr not is Function')

        }

        for (let i = 0; i < arr.length; i++) {

            let val = callback(arr[i], i)

            les.push(val)

        }

        return les

    }

2:模拟filter

    function filter(arr, callback) {

        let res = [];

        for (let i = 0; i < arr.length; i++) {

            let tmp = callback(arr[i], i)

            if (tmp) {

                res.push(arr[i])

            }

        }

        return res

    }

3:请手写instanceof原理函数?

    function new_instance_of(leftVaule, rightVaule) {

        let rightProto = rightVaule.prototype;

        leftVaule = leftVaule.__proto__;

        while (true) {

        if (leftVaule === null) {

                return false; 

            }

            if (leftVaule === rightProto) {

                return true; 

            }

            leftVaule = leftVaule.__proto__

        }

    }

4:请写出递归深拷贝函数

    function deepCopy(data){

        let res;

        if(!(data instanceof Object)) return data;

        res = (data instanceof Object) && Array.isArray(data)?[]:{};

        for(let k in data){

            res[k] = deepCopy(data[k])

        }

        return res;

    }

5:封装一个数组去重的方法:

    function removeArr(arr1) {

    let arr=[]

    if (!arr instanceof Array) {

        throw new Error('arr not is Array')

    }

    for (let i = 0; i < arr1.length; i++) {

        arr[i]=arr1[i]

    }

    for (let i = 0; i < arr.length - 1; i++) {

        for (let j = i + 1; j < arr.length; j++) {

            if (arr[i] == arr[j]) {

                arr.splice(arr[j], 1)

                i--

            }

        }

    }

    return arr

}

### 程序题

> 请写出下面变量的访问权限是什么??

1.

~~~js

var a = 23;

function foo(){

    var b = 23;

    c = 123

    function bar(){

        var c = 123;

        var d = 345

        return function (){

            if(c){

                var e = 213

            }

        }

    }

    let res= bar()

    res();

}

~~~

    1.var a 全局变量

    2. var b foo()里 局部变量

    3.c在foo()  局部变量

    4.var c在bar()里  局部变量

    5.var d 在bar()里  局部变量

    6.var e 在 bar() 局部变量

    7.let res 在foo() 局部变量

    8.res()在foo()  局部变量

2.

~~~js

if(123){

    let a = 123;

}

var a = 345;

{

    let b = 456;

}

~~~

    1.let a 全局变量

    2.var a 全局变量

    3.let b 全局变量

3.

~~~js

function foo(){

    a = 123

    for(let i  in [1,2]){}

    function bar(){

        c = 123;

        var c;

    }

    bar()

}

foo()

~~~

    1.a foo()里 局部变量

    2.let i for() 局部变量

    3.c bar() 局部比爱能量

    4.var c bar()局部变量

> 请写出表达式运算过程

~~~

let a= 123;

a = 123

let res = a && 'hellow'

res=123='hellow'

let res1 = true && 'dafsd' && 0 && 'aaaaa'

res1 = true = 'dafsd' = 0

let res1 = true && 'dafsd' && 10 && 'aaaaa'

res1 = true = 'dafsd' = 10 = 'aaaaa'

let res = 0 || undefined || null || 34-12;

res=34-12=22

let res = 0 || []

res =[]

let res1 = 0 || {}

res1 = {}

相关文章

  • 任务11

    第一题 http://js.jirengu.com/mekep第二题 http://js.jirengu.com/...

  • js题

    1、 2、 3、 4、

  • js题

    1、数据类型 JavaScript共有八种数据类型,分别是 Undefined、Null、Boolean、Numb...

  • js题

    1.闭包的理解,闭包的原理,那些地方会用到,闭包的缺点2.跨域的方式(jsonp,cors),对跨域了解吗,jso...

  • js题

    以下代码中val、data、data2、x的值分别是什么? 为什么 var a = 1, b = 2, c = 3...

  • js题

    1.下面代码的运行,输出的结果是: A:[ 'name', 'age' ]B:[ 'name', 'age', '...

  • js题

    ### 简答 1:如何理解原型? 1.没创建一个对象时都会关联另一个对象,这个对象就是原型对象。创建出来的对象...

  • 如何用JS买鸡?

    学习JS有段时间了,学了基本的逻辑题,下面我为大家讲一道复杂的百元买白鸡的数学题,与小学题不同,我们能用JS直接知...

  • js编程题

    求一个数的百位,十位和个位的数字

  • JS题 应用

    实现一个动画函数,无需考虑透明度function animate(ele, tarStyle, tarValue)...

网友评论

      本文标题:js题

      本文链接:https://www.haomeiwen.com/subject/rtkyfdtx.html