javascript题目1

以下程序的输出结果是什么?(选择一项)

//climg.mukewang.com/590bee2d0001f56705000198.jpg

两个引用类型的数据进行比较,比较的是它们的引用。即使是两个看着一模一样的数组,如果不是引用的同一个数组,那么它们也是不相等的。只有它们引用同一个数组,比较的时候才会相等。例如var a=[];var b=[] , a和b并没有引用同一个空数组,所以a不等于b。var c=[]; var d=c,把c的值赋值给了d,即c和d引用了同一个空数组,所以它们两个是相等的。另外,如果两个不同类型的数据进行==比较,会把左右转换成同一类型再比较。

[]==[]返回false;[]===[]返回false;4==[4]返回为true([4]转化为数值类型,所以[4]==4为true);4===[4]返回false,所以本题答案为D。

var arr2=[arr1[0],arr1[1]] 中,并没有直接把arr1赋值给arr2, 它们两个指向的内存地址不一样,所以给arr1添加或者删除元素不会影响到arr2。

但arr2中的元素,是直接复制arr1中的元素。由于arr1[1]是引用类型, 故arr1[1]==arr2[1],那么在arr1[1]删除或者添加元素会影响到arr2的结果。

//img.mukewang.com/climg/5f531146294e8e8c05001000.jpg

所以本题答案为D。

以下程序的输出结果是?(选择一项)

//climg.mukewang.com/590c10240001483505000365.jpg

fn函数在预解析时,已经提前进行了该函数的声明。所以document.write(fn)会输出function fn() {},本题答案为C。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>什么是函数</title>
</head>

<body>
    <script>
    function fun(){
        document.write("B");
    }
    document.write(fun);
    </script>
</body>

</html>

以下程序的输出结果是?(选择一项)

//climg.mukewang.com/590c10df00016e4705000348.jpg

变量预解析时,会提前声明(定义)并赋值为undefined,要注意赋值语句不会预解析。

var fn=function(){}是定义了一个变量,变量值为函数。所以fn遵循的是变量预解析。也就相当于如下:

var fn=undefined;

document.write(fn);

fn=function(){};

所以上面代码输出的结果为undefined,本题代码为B。

以下代码的输出结果依次为?(选择一项)

//img.mukewang.com/climg/5f532a53291d108c05001000.jpg

本题考查代码执行顺序和函数的预解析。

函数在预解析阶段会被提升,所以在定义之前调用函数a并不会报错。代码顺序执行,先调用了函数a,所以会输出“小慕”。后面紧跟着输出“小欧”,最后输出“小糖”。所以本题答案为D。

关于arguments,下列说法正确的是? (选择两项)

本题考查的是arguments的使用。

arguments是类似于数组的对象,但并不是真正的数组对象,A说法错误;

arguments.length可以获得传递的参数的个数,B说法正确;

arguments[ ]可以获得传递参数的值,中括号里面放的参数的索引,索引从0开始,C说法错误,D正确;

所以本题答案为BD。

下面这段代码运行结果是?(选择一项)

//climg.mukewang.com/582bf8420001f64503820139.jpg

如果return后面没有返回值,默认返回undefined,且执行完return语句,后面的语句不会执行了。

本题代码中,调用fun2(20,10),那么参数num1=20,num2=10。if判断num1>num2条件成立,执行return。注意return后面没有加返回值,默认为undefined,所以本题答案为C。

以下代码的输出结果是?(选择一项)

//img.mukewang.com/climg/5f532cdd2947096a05001000.jpg

参数也相当于一个局部变量。代码中,调用fn()没有传递实参,那么形参a如同变量定义未赋值一样,默认为undefined,所以第一个a输出“undefined”。

函数中,定义了局部变量a,则不会向上查找全局变量a。函数中a=34,是为参数a赋值,全局变量a依旧为23。

以下代码,输出的结果是?(选择一项)

//img.mukewang.com/climg/5f5347142911f25b05001000.jpg

本题代码中,先调用了obj对象的a方法,并把返回值this.b赋值给全局变量obj1。a方法是obj调用的,所以a中的this指向obj。那么this.b获取到的是obj的b方法,后面调用obj1相当于调用了obj的b方法。obj1是在全局下面调用的,所以b方法中的this指向的是全局对象window,所以this.c获取的就是全局下的变量c,输出结果为1,本题答案为A。

下面代码中输出的结果是?(选择一项)

//img.mukewang.com/climg/5f21199329996c2d05001000.jpg

普通函数中this指向调用该函数的对象。

1、在全局作用域中,声明一个常量接收obj对象下的fn1函数,然后调用该函数,相当于window.res()方式调用,此时this指向window。

2、将test方法赋值给obj对象下的fn2, 之后通过obj.fn2形式调用,所以该方法内的this指向obj对象。

3、由于setTimeout函数中回调函数执行时没有指定调用对象,js语法中规定,默认是window对象调用的,所以this指向window。

所以本题答案为D.

观察下图,代码之中有几个this?(选择一项)

//img.mukewang.com/climg/5b0f96b30001088b05000323.jpg

同学你好,这里主要是call的使用。之前讲过call方法,视频链接为:https://class.imooc.com/lesson/1628#mid=39918

同学可以再回顾一下。老师再简单为同学介绍一下:

函数可以使用“名字()”的形式调用:

http://img.mukewang.com/climg/5ff1a22409feb90806990251.jpg

此时this指向window:

http://img.mukewang.com/climg/5ff1a2390962f6f511630103.jpg

还可以使用call方法来调用函数,其中call的第一个参数,可以用来改变this的指向,如下

http://img.mukewang.com/climg/5ff1a24d090e5b6e09840429.jpg

http://img.mukewang.com/climg/5ff1a2550951670606320180.jpg

所以练习题中:

1、var f=foo.call({id:1})含义是:调用foo,并把this的指向{id:1}

2、foo调用之后返回值第一个return的箭头函数 ,而箭头函数中没有this指向,所以即使使用call传入{id:2}对象,this指向的也是foo函数中的this,也就是{id:1}

3、下面的以此类推,返回的都是箭头函数,没有this指向,this指向的也是foo函数中的this,也就是{id:1}

最后只有一个this。

祝学习愉快!

以下场景中,可以将函数声明为箭头函数的选项是?(选择一项)

下图所示代码,输出的结果是?(选择一项)

//img.mukewang.com/climg/5f58499f29cc4d4a05001000.jpg

数组解构时,匹配结果严格等于undefined时,默认值才会生效。

本题代码中,调用fn传入的参数1和null都不严格等于undefined,所以a、b的默认值都没有生效,a的匹配结果是1,b的匹配结果是null。

null在参与运算时,默认会转换成数值0,a+b的最终结果为1,所以本题答案为C.

以下哪一个选项的代码,可以使arr数组中的元素保持不变?(选择一项)

//img.mukewang.com/climg/5f5b72e4297e931005001000.jpg

 本题主要考查解构赋值的默认值是表达式时,遵循惰性求职的原则。

惰性求值指的是只有用到时,才会去求值,所以当test使用默认值,就会执行arr.pop(),删除数组最后一项元素,改变arr的值。

obj为空对象,对象解构时test使用默认值,A选项错误。

obj对象中没有test属性,对象解构时test使用默认值,B选项错误。

obj对象中test属性值为arr数组,可以正常解构,不会使用默认值, C选项正确。

obj对象中test属性为undefined,对象解构时test使用默认值,D选项错误。

所以本题答案为C。

关于对象解构的自定默认值生效的条件是?(选择一项)

本题主要考察对象解构赋值的默认值,

对象解构中,只有匹配到undefined的时候会使用默认值,所以本题答案为B.

下列选项中,对已声明变量进行对象的解构赋值正确的是?(选择一项)

先声明变量,然后在进行解构赋值,整个解构必须使用圆括号包裹起来,否则会报错,因为解析器会将起首的大括号,理解成一个代码块,而不是赋值语句,A选项正确,BD选项错误。

const 声明的是常量,不能先声明后赋值,C选项错误。

所以本题答案为A.

下面代码中,args表示剩余参数的选项是?(选择两项)

本题主要考查对剩余参数和剩余元素的区分。

剩余参数和剩余元素的书写格式都是使用“…变量名”的方式,不同的是:剩余参数是直接作为函数参数使用的。剩余元素是在解构赋值时,用来接收剩下的元素。

A选项中的参数是一个对象格式,对象中的...args是接受对象中的剩余元素。

B选项中的args是直接作为函数参数使用的,此处的...args表示剩余参数。

C选项中的参数是一个数组格式,数组中的...args表示接收剩余的元素。

D选项中的参数有两个,args是直接作为函数参数使用的,此处的...args表示剩余参数。

所以本题答案为BD.

A

//img.mukewang.com/climg/5f4e09ce29f4ebe505001000.jpg

B

C

D

//img.mukewang.com/climg/5f4e09f4296b7da905001000.jpg

猜你喜欢

转载自blog.csdn.net/qq_27009517/article/details/112298503