js练习题第10天 答案及解析

本篇文章是js基础练习题第十天的答案及解析部分,纯题目部分请移步js基础练习题 第10天

正文

1.分析以下代码:

1
2
3
4
5
6
7
8
9
var name = "Window";
var object = {
name: "Object",
getName: function() {
return function() {
return this.name;
}
}
}
该代码段运行后,
object.getName = __________,
object.getName() = __________,
object.getName()() = __________,
getName()() = __________,

答案:f(){return function(){return this.name;}}f(){return this.name;}Window、报错(ReferenceError

若把getName函数修改成
1
2
3
4
5
6
getName: function() {
var that = this;
return function() {
return that.name;
}
}
object.getName()() = __________。

答案:Object

该题目想考察的就是JS中this绑定与失绑的问题,具体可查看这篇文章


2.请简述IIFE的作用和声明方法。

IIFE是Immediately Invoked Function Expression的简称,意为立即执行的函数表达式,即立即执行函数,IIFE通常用来模拟私有作用域,将只使用一次的函数通过IIFE的形式调用,来大大节省资源占用;其声明方式为:
1
2
3
(function functionName(i) { 
//your code
})(i);


3.运行下列代码,将在控制台输出__________:
1
2
console.log(a);
let a = 1;

答案:报错(ReferenceError

let方式声明的变量不存在变量提升。


4.
1
2
3
function foo(x = y, y = 2) {
return x + y;
}
foo()的返回值为__________。

答案:报错(ReferenceError

在函数参数解析中,是按照从左向右的顺序进行解析的,当将y赋给x时,因此时y并为声明,故报错。


5.
1
2
3
function bar(x = "2", y = +x) {
return x + y;
}
bar()的返回值为__________。

答案:"22"

函数执行后,x = "2", y = 2, 此时的+为拼接操作符。


6.分析下列代码的运行结果:
1
2
3
4
function bar(x, y) {
let x = x.toUpperCase();
return x;
}
运行bar("hello", "world");的返回值是__________。

报错(SyntaxError

由于在函数参数中已经声明了x,在函数内再进行let声明已然重复,故会报错Identifier 'x' has already been declared,提示x已声明。

说明

  1. 题目中出现的JS指的是采用ECMAScript 2015及之后标准的JavaScript
  1. 答案中,若有错误和需完善的地方,可在下方留言反馈哈~~

  2. 查看纯习题版,请点击js基础练习题 第10天

--本文结束 感谢阅读--
创作十分不易,原创更应鼓励