JavaScript 专项练习 错题记录

52 阅读3分钟
  1. 下列关于 js 函数定义方式的描述正确的是

A. function add(a,b){return a+b;}函数表达式

B. var add=new Function(‘a’,’b’,’return a+b’)函数表达式

C. function add(a,b){return a+b;}函数声明

D. var add=function(a,b){return a+b;}函数声明

E. var add=new Function(‘a’,’b’,’return a+b’);函数声明

解析

函数声明
function sum(a,b){
    return a+b
}
函数表达式
var sum = function(a,b){
    return a+b
}
Function构造函数【从技术角度讲,这是一个函数表达式】
var sum = new Function('a','b','return a+b')//不推荐使用,影响函数解析性能
  1. 控制台打印的结果是?
for(let i=0;i<2;i++){
    setTimeout(function(){
   console.log(i)
    },100);
}

for(var i=0;i<2;i++){
    setTimeout(function(){
        console.log(i)
    },100);
}

A. 0 1 2 2

B. 0 1 0 1

C. 0 1 1 1

D. 1 1 0 0

解析

  • Js是单线程的,Settimeout是异步宏任务,所以代码执行遇到异步的,就放在事件队列中的,等线程中的任务执行完后才会执行事件队列中的任务。
  • let是es6中声明变量的方式,有自己的作用域块,可以放变量,所以let绑定for循环时,每个i都有自己的值. 在这个for循环中就是满足一次条件向事件队列中添加一个打印i的事件,且每个事件中的i有自己的值
  • Var没有作用域块,for循环的变量就会后一个覆盖前一个,当循环完毕时i就只有一个值,又因为for循环的判断条件是不满足跳出,所以i最后是2而不是1
  • 这些完了后执行事件队列中的任务,就打印了0122 ...

如果想要调用obj对象的arr属性,以下做法中,错误的是()

A. obj["arr"]

B. obj["a"+"r"+"r"]

C. obj{"arr"}

D. obj.arr

解析

在js中,调用对象属性的方法包括使用点操作符或者中括号,使用对象.属性进行调用时,一般情况下,属性是不需要带引号的;而使用中括号进行调用时,属性一般是以字符串的形式,也可以是变量或者表达式,ABD选项的做法均正确,C选项的做法是错误,不能使用花括号来调用对象的属性。

执行以下程序,输出结果为()

var str = 'acdaecad';
var obj = {};
for (var i = 0;i<str.length;i++){
            if (obj[str.charAt(i)]){
                obj[str.charAt(i)]++;
            }
            else {
                obj[str.charAt(i)] = 1;
            }
        }
var val1;
var val2 = 0;
for (var k in obj) {
            if (obj[k] > val2){
                val2 = obj[k];
                val1 = k;
            }
}
console.log(val1);

A. a

B. 3

C. e

D. 1

解析

  1. 定义一个空对象 obj,用于存储每个字符及其出现的次数。
  2. 遍历字符串 str 中的每个字符。如果字符已经在 obj 中,就将其计数加一;如果字符不在 obj 中,就将其添加到 obj 中,并将其计数设为一。
  3. 定义两个变量 val1 和 val2,用于存储出现次数最多的字符及其出现的次数。
  4. 遍历 obj 中的每个字符及其出现的次数。如果一个字符的出现次数大于 val2,就更新 val1 和 val2
  5. 最后,打印出现次数最多的字符 val1

例如,对于输入字符串 'acdaecad',输出将是 'a',因为 'a' 在字符串中出现了 3 次,这是所有字符中最多的。

16.下面这段代码的输出是

var b = 3; 
(function(){
    b = 5;
    var b = 2; 
})();
console.log(b);

A. 5

B. 3

C. 2

D. 程序报错

解析

image.png 立即执行函数,执行完毕后会立即销毁,所以立即执行函数内部的变量b就被回收了,但是全局变量b不会被回收,所以console.log输出的就是全局变量 b=3