专项练习17

目录

一、选择题

    1、下列关于 JavaScript 模块化的描述,错误的是

    2、执行下列代码,输出结果为()

    3、以下JavaScript 代码,返回 false 的是

    4、执行以下程序,下列选项中,说法正确的是()


一、选择题

1、下列关于 JavaScript 模块化的描述,错误的是

A、模块化有利于管理模块间的依赖,更依赖模块的维护

B、主流的模块化包括CommonJS,AMD,CMD等

C、Sea.js遵循AMD规范,RequireJS遵循CMD规范

D、AMD推崇依赖前置,CMD推崇依赖就近

正确答案:C

解析:

(1)AMD 是 "Asynchronous Module Definition" 的缩写,指异步模块定义

①它采用异步方式加载模块,模块的加载不影响后面语句的运行

②所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完后,这个回调函数才会运行

③ AMD  也采用 require() 语句加载模块,但是不同于 CommonJS,主要有两个Javascript库实现了AMD规范:require.js和curl.js

④更多参考链接

Javascript模块化编程(二):AMD规范 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html(2)AMD与CMD

①性质

AMD 是 RequireJS 在推广过程中对模块定义的规范化产出
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出
②区别

依赖的模块:AMD 是提前执行,推崇依赖前置,CMD 是延迟执行,推崇依赖就近

(3)例子:直观查看依赖的就近前置

<script>
    // CMD
    define(function(require,exports,module){
        var a = require('./a')
        a.doSomething()//a执行某些事情
        var b = require('./b')//依赖可以就近
        b.doSomething()//b执行某些事情
    });
    // AMD
    define(['./a','./b'],function(a,b){//依赖必须一开始就写好
        a.doSomething()//a执行某些事情
        b.doSomething()//b执行某些事情
    })
</script>

2、执行下列代码,输出结果为()
var val = 12;
function fun1(){
    console. log(val);
    var val = 20;
    console.log(val);
}
fun1();

A、12 20

B、12 12

C、undefined 20

D、20 undefined

正确答案:C        你的答案:A

解析:

(1)选项解释

①当局部变量和全局变量同时存在时,局部变量优先级更高

②在函数fun1内部,由于存在变量提升,会先使用var声明局部变量val,而变量的赋值并不会跟着一起提升,接着使用console.log()输出val,由于val变量已声明但未赋值,故输出结果为undefined

③然后再对val进行赋值,其值为20,最后再次输出val,输出结果为20

(2)代码解释:由于var的变量提升,题目的代码相对于如下代码

var val = 12;
function fun1(){
    var val
    console. log(val);
    val = 20;
    console.log(val);
}
fun1();

3、以下JavaScript 代码,返回 false 的是

A、var test=1;typeof test=='number';

B、var test=1.2;typeof test=='float';

C、var test=undefined;typeof test=='undefined';

D、var test={};typeof test=='object';

E、var test='4399'-0;typeof test=='number';

F、var test=null;typeof test=='object';

正确答案:B        你的答案:E

解析:

(1)typeof能输出的类型

类型 解释
undefined 值未定义
boolean 布尔值
string 字符串
number 数值
object 对象或null
function 函数
Symbol ES6 新增类型

(2)选项解释

①A 选项:typeof tset 返回 'number','number' == 'number',返回 true 

②B 选项:typeof tset 返回 'number','number' == 'float',返回 false 

③C选项:typeof tset 返回 'undefined','undefined' == 'undefined',返回 true

④D选项:typeof tset 返回 'object', 'object' == 'object',返回 true

⑤E选项:typeof tset 返回 'number', 'number' == 'number',返回 true

  • js解释器会将字符串'4399'调用Number()转换为4399,再去计算
  • 若是 ‘+’字符串拼接;如果操作数存在对象、数值、布尔值,调用toString()方法,继续字符串拼接。
  • 若是 ‘-’,按照数值来算

⑥F选项:typeof tset 返回 'object', 'object' == 'object',返回 true


4、执行以下程序,下列选项中,说法正确的是()
class Dog{
  static dog(){
    console.log(this); ...①
    }
  bark(){
    console.log('狗会叫');
    }
}
var dog = new Dog();

A、①式的this指代类的实例对象

B、调用dog方法,既可以使用Dog.dog(),也可以使用dog.dog()

C、调用bark方法,只能使用dog.bark(),不能使用Dog.bark()

D、在类中,不允许静态方法和非静态方法重名

正确答案:C        你的答案:A

解析:

(1)dog方法为静态方法,bark方法为实例方法

  • 静态方法本身不能使用实例对象来调用,所以this不会指向实例对象
  • 静态方法只能由进行调用实例方法只能由实例对象进行调用

(2)选项分析

①选项A:static dog() 里的this指代的是 class Dog 这个 class 本身,而bark里的this指向的是类的实例化对象

②选项B:调用 static dog() 方法,只能使用 Dog.dog(); 不可以使用 dog.dog(); 

③选项C:类中方法前面没有static,则该方法只能通过类的实例化对象调用,不能通过类本身调用

④选项D:由于类内部的静态方法的调用者只能为类,实例方法的调用者只能为实例对象,不会在调用时造成歧义,因此允许重名

猜你喜欢

转载自blog.csdn.net/qq_51478745/article/details/131495923