问题 1
// 请解释下面代码的输出结果
console.log(1 + "2" + "2");
console.log(1 + +"2" + "2");
console.log(1 + -"1" + "2");
console.log("A" - "B" + "2");
console.log("A" - "B" + 2);
答案 1
- 输出结果为
"122"
,因为1 + "2"
会被解释为字符串拼接。 - 输出结果为
"32"
,因为+"2"
会被解释为数值类型。 - 输出结果为
"02"
,因为- "1"
也会被解释为数值类型。 - 输出结果为
"NaN2"
,因为"A" - "B"
会得到NaN
,然后与字符串拼接。 - 输出结果为
NaN
,因为"A" - "B"
会得到NaN
,然后与数值相加。
问题 2
// 解释闭包的概念,并举例说明
答案 2
闭包是指函数能够访问其词法作用域外部的变量,即使在其词法作用域外部执行。闭包可以通过内部函数访问外部函数的变量。
举例:
function outerFunction() {var outerVar = 'I am outer';function innerFunction() {console.log(outerVar);}return innerFunction;
}var innerFn = outerFunction();
innerFn(); // 输出 "I am outer"
在这个例子中,innerFunction
形成了闭包,可以访问外部函数 outerFunction
中的 outerVar
变量。
问题 3
// 请解释以下代码的执行顺序,并给出输出结果
console.log('start');setTimeout(function() {console.log('timeout');
}, 0);Promise.resolve().then(function() {console.log('promise');
});console.log('end');
答案 3
执行顺序是:
- 打印
'start'
- 打印
'end'
- 打印
'promise'
- 打印
'timeout'
问题 4
// 解释什么是事件冒泡和事件捕获,并说明它们之间的区别
答案 4
事件冒泡是指事件从最内层的元素开始向最外层元素传播的过程,而事件捕获则是从最外层元素向内层元素传播事件。事件冒泡是 DOM 树中的默认行为。
区别:
- 事件冒泡:事件从最内层元素向最外层元素传播,常用于处理事件冒泡的行为。
- 事件捕获:事件从最外层元素向最内层元素传播,不太常用。
问题 5
// 请解释什么是异步编程,以及常见的处理异步编程的方式
答案 5
异步编程是指在程序的执行过程中,某些操作不会立即返回结果,而是在稍后才会得到结果。常见的处理异步编程的方式有:
- 回调函数
- Promise 对象
- async/await 关键字
- 事件监听(EventEmitter)
- 使用 Generators 实现异步操作