题目解析篇

一. 下列代码的输出结果为:()

 Object obj obj

二.

当引用类型数据和基本数据类型比较时会先调用引用数据类型的valueOf方法,如果得到一个对象,再调用toString方法

三.

const arr=[1,2,3],下列那些做法会导致报错()

  1. arr=[...arr,4]
  2. arr.push(4)
  3. arr.splice(0,2)
  4. arr.length=0

1.改变arr地址值会报错,而2、3、4只是改变数组内容不会报错

四.函数输出结果

function fun1() {

        "use strict";

        console.log(this);

      }

      (function () {

        console.log(this);

        fun1();

      })();

      fun1.call(this);

      let obj = {

        name: "测试",

      };

      fun1.bind(this).call(obj);

首先执行匿名函数为window;然后执行fun1(),普通函数调用,this为window,严格状态下为undefined;fun1.call(this),this为window;fun1.bind(this).call(obj),因bind不管怎么调用都是那个this值故call(obj)无效为window

window undefined window window

调用方式非严格模式备注
普通函数调用window严格模式下是 undefined
构造函数调用实例对象原型方法中 this 也是实例对象
对象方法调用该方法所属对象紧挨着的对象
事件绑定方法绑定事件对象
定时器函数window
立即执行函数window

当对函数调用call()和apply()都会调用函数执行。
fun.call()\fun.apply() 和 fun() 的区别:
在调用call()和apply()可以将一个对象指定为第一个参数,即:此时这个对象将会成为函数执行时的this。 就是说此时该对象短暂地拥有该函数的使用权。
原文链接:https://blog.csdn.net/mantou_riji/article/details/123959832 

call()方法可以接收多个参数,第一个参数是指定的this对象,如果需要多个参数需要把每个参数都列举出来

apply()方法与call()方法类似,不同的是传参的方式,第一个参数仍然是指定的this对象,第二个参数是一个类数组

bind()方法传参和call()类似,但是bind()与其他两种方法有一个很大的区别就是bind()会返回一个指定好的this的函数供之后调用

bind() 最简单的用法是创建一个函数,不论怎么调用,这个函数都有同样的 this 值

对于call、apply、bind三种方法的详细可以看学长的这篇文章call、apply、bind三种方法的比较

五. 函数输出结果

function foo(

        x,

        y = () => {

          console.log(x);

        }

      ) {

        console.log(x);

        var x = 2;

        console.log(x);

        y();

      }

      foo(1);

箭头函数调动:y(); 在形参括号里是一个闭包,故箭头函数打出来的x为1

var x=2;是又定义了一个x,若为x=2;则为改变原函数值;

1 2 1

六.

  1. 请给补全代码,使其结果输出为true

let a = ???;

      console.log(a == 1 && a == 2 && a == 3);

答案:

let a = {

        n: 1,

        valueOf: function () {

          return this.n++;

        },

      };

      console.log(a == 1 && a == 2 && a == 3);

若为console.log(a == 1 && a == 2 && a == 4);

则        n: 0,

return Math.pow(2,this.n++);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值