题目1

1
2
3
4
5
6
7
8
9
10
var foo=”Hello”;
(function(){
var bar=”World”;
alert(foo+bar);
})();
alert(foo+bar);
A: Hello World报错
B: Hello World Hello World
C: Hello World Hello
D: Hello World Hello
  • 答案
    • A
  • 解析
    • var是函数作用域,也就是以函数和分割,函数内声明了var,在这个函数范围内都可以访问到.,而let是块级作用域,比如for循环当中的let变量,在for循环里面就可以访问到,在for循环外面就访问不到了!

题目2

1
2
3
4
5
6
7
8
9
10
11
以上 JavaScript 代码,在浏览器中运行的结果是
var arrTemp = [1,2,3];
arrTemp.shift();
arrTemp.push(1);
arrTemp.unshift(2);
var arrNew = arrTemp.concat([1,2]);
console.log(arrNew);
A: [2,2,3,1,1,2]
B: [2,1,2,1,1,2]
C: [2,2,3,1,[1,2]]
D: [2,1,2,1,[1,2]]
  • 答案

    • A
  • 解析

    • concat可以用于连接字符串和数组,均不会改变原来的变量,均返回一个连接后的变量

题目3

1
2
3
4
5
以下对call() 和 apply() 说法哪些是正确的  () (多选)
A: apply()函数有二个参数,第一个参数是上下文,第二个参数是参数组成的数组
B: 非严格模式,如果第一个参数是null,则使用全局对象代替
C: call和apply的意思一样,只不过是参数列表不一样
D: 通过apply可以将数组转化为参数列表的集合
  • 答案
    • ABCD
  • 解析
    • call() 方法使用一个指定的this值和单独给出的一个或多个参数来调用一个函数。(该方法的语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。)
    • 第一个参数均为可选的
      • function 函数运行时使用的 this 值。请注意,this可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 nullundefined 时会自动替换为指向全局对象,原始值会被包装。(也就是说如果在严格模式下,则不会被替换为全局对象window,而是会被指向null和undefined)