以下程序的输出结果是什么?(选择一项)
两个引用类型的数据进行比较,比较的是它们的引用。即使是两个看着一模一样的数组,如果不是引用的同一个数组,那么它们也是不相等的。只有它们引用同一个数组,比较的时候才会相等。例如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的结果。
所以本题答案为D。
以下程序的输出结果是?(选择一项)
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>
以下程序的输出结果是?(选择一项)
变量预解析时,会提前声明(定义)并赋值为undefined,要注意赋值语句不会预解析。
var fn=function(){}是定义了一个变量,变量值为函数。所以fn遵循的是变量预解析。也就相当于如下:
var fn=undefined;
document.write(fn);
fn=function(){};
所以上面代码输出的结果为undefined,本题代码为B。
以下代码的输出结果依次为?(选择一项)
本题考查代码执行顺序和函数的预解析。
函数在预解析阶段会被提升,所以在定义之前调用函数a并不会报错。代码顺序执行,先调用了函数a,所以会输出“小慕”。后面紧跟着输出“小欧”,最后输出“小糖”。所以本题答案为D。
关于arguments,下列说法正确的是? (选择两项)
本题考查的是arguments的使用。
arguments是类似于数组的对象,但并不是真正的数组对象,A说法错误;
arguments.length可以获得传递的参数的个数,B说法正确;
arguments[ ]可以获得传递参数的值,中括号里面放的参数的索引,索引从0开始,C说法错误,D正确;
所以本题答案为BD。
下面这段代码运行结果是?(选择一项)
如果return后面没有返回值,默认返回undefined,且执行完return语句,后面的语句不会执行了。
本题代码中,调用fun2(20,10),那么参数num1=20,num2=10。if判断num1>num2条件成立,执行return。注意return后面没有加返回值,默认为undefined,所以本题答案为C。
以下代码的输出结果是?(选择一项)
参数也相当于一个局部变量。代码中,调用fn()没有传递实参,那么形参a如同变量定义未赋值一样,默认为undefined,所以第一个a输出“undefined”。
函数中,定义了局部变量a,则不会向上查找全局变量a。函数中a=34,是为参数a赋值,全局变量a依旧为23。
以下代码,输出的结果是?(选择一项)
本题代码中,先调用了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。
下面代码中输出的结果是?(选择一项)
普通函数中this指向调用该函数的对象。
1、在全局作用域中,声明一个常量接收obj对象下的fn1函数,然后调用该函数,相当于window.res()方式调用,此时this指向window。
2、将test方法赋值给obj对象下的fn2, 之后通过obj.fn2形式调用,所以该方法内的this指向obj对象。
3、由于setTimeout函数中回调函数执行时没有指定调用对象,js语法中规定,默认是window对象调用的,所以this指向window。
所以本题答案为D.
观察下图,代码之中有几个this?(选择一项)
同学你好,这里主要是call的使用。之前讲过call方法,视频链接为:https://class.imooc.com/lesson/1628#mid=39918
同学可以再回顾一下。老师再简单为同学介绍一下:
函数可以使用“名字()”的形式调用:
此时this指向window:
还可以使用call方法来调用函数,其中call的第一个参数,可以用来改变this的指向,如下
所以练习题中:
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。
祝学习愉快!
以下场景中,可以将函数声明为箭头函数的选项是?(选择一项)
下图所示代码,输出的结果是?(选择一项)
数组解构时,匹配结果严格等于undefined时,默认值才会生效。
本题代码中,调用fn传入的参数1和null都不严格等于undefined,所以a、b的默认值都没有生效,a的匹配结果是1,b的匹配结果是null。
null在参与运算时,默认会转换成数值0,a+b的最终结果为1,所以本题答案为C.
以下哪一个选项的代码,可以使arr数组中的元素保持不变?(选择一项)
本题主要考查解构赋值的默认值是表达式时,遵循惰性求职的原则。
惰性求值指的是只有用到时,才会去求值,所以当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
B
C
D