参考答案
第1章
1
(1) ×,JS动态弱类型
(2)×,不是BOM而是DOM
(3) √
(4) ×,TS是JS的超集
第2章
1
(1)不合法,\u{23ff}不是正确的unicode编码形式
(2)合法
(3)合法
(4)合法其中\uff45是单个字符
(5)合法
2
输出为
0 10 20
0 10 21
0 10 22
3  -1
4  true
5  number  3
6
(1)undefined,子作用域不影响本作用域
(2)函数,因为没有赋值所以没有覆盖
(3)3, a先定义了,然后被覆盖了
7
(1)""
(2)所定义的空函数
(3)所定义的空对象  true
3
1
(1)略,自行练习。
(2)
function mycall(){
    console.w());
}
function produce(call,millis){
    var w();
    return function(){
        let w();
        if(now-time>millis){
            time=now;
            call();           
        }
    }
}
const alias=produce(mycall,500);
setInterval(alias,100);
(3)
function mycall(){
    console.log("calling at ",w());
}
function produce(call,millis){
    var handle=null;
    return function(){
        if(handle!=null){
            clearTimeout(handle);
            handle=setTimeout(function(){call
();handle=null;},mills);           
        }
    };
}
const alias=produce(mycall,3000);
alias();
alias();
alias();
(4)
function LazyNumber(value){
    var acts=[];   
    this.add=function(v){
        acts.push( (function(v){value+=v;}).bind(this,v));
        return this;
    }
    this.minus=function(v){
        acts.push( (function(v){value+=v;}).bind(this,v));
        return this;
    }
    this.multiply=function(v){
        acts.push( (function(v){value+=v;}).bind(this,v));
        return this;
    }
    this.div=function(v){
        acts.push( (function(v){value+=v;}).bind(this,v));
        return this;
    }
    =function(){
        let act;
        while((act=acts.shift())!=null)act();
        return value;   
    }
}
let num=new LazyNumber(10);
num.add(1).minus(5).multiply(7).div(2);
console.());
(5)
function Provider(){
    var dict={};
    ByType(stype,args=[]){
        if(stype in dict)return dict[stype];       
        for(let t in dict)
            if(stype instanceof t)
                return dict[t];
        return dict[stype]=new stype(...args);
    }
}
function A(a){
    this.a=a;
}
let provider=new Provider;
ByType(Number,[3]);
ByType(RegExp,[/abc/]);
ByType(A,[6]);
console.ByType(Number));
console.ByType(RegExp));
console.ByType(A));
2
function A(){
    for(var i=0;i<5;i++){
        setTimeout( (function(i){
            console.log(i);       
        }).bind(this,i),0);
    }
}
A();
3
(1)
3,因为有3个元素
11,因为最大自然数索引为10
11,因为关联键不影响数组的长度计算
(2)
长度11 结果为 [1, 2, 3, 4, 5, 6, 7, 8,[9,10], 1, [2,[3]]]
(3)
10 传入参数为单个且为数值时认为它为长度
2  传入参数有多个时均为元素
1  传入参数为单个且不为数值时认为它为元素
报错,因为会当1.1为长度,但是1.1并不能当长度
(4)D,有时候是不稳定的
(5)
function sort_function(a,b){
    if(a.index>b.index)return 1;
    else if(a.index==b.index)return 0;
    else return -1;
}
var arr=[{index:1},{index:6},{index:3,v:1},{index:5},{index:3,v:6},{index:2}];
arr.sort(sort_function);
console.log(arr);
本次排序是稳定的
4
有问题,throw和它后面的表达式之间不可以有换行。
5
最外层绑定了变量a和它的值2
函数执行前就绑定了变量a。
第三个作用域,在catch内创建了变量绑定a,并在执行过程中给它赋值3。
但是catch退出后就回到了函数作用域,其内的a并没有被赋值。
所以最终输出的是undefined.
6
返回false。Date()得到一个时间字符串,为String类型而不为Date类型
4
1
<div id="content"></div>
<script>
    const articles={
        "diary":{
            "today":"it is a funny day!"
        },
        "program":{
            "algorithm":"algorithm is too hard!"
        }
    }
    function makeTree(arr,i){
        const tag=str=&ateElement(str);
        let ul=tag('ul'),li=tag('li');
        ul.append(li);
        li.innerText=arr[i];
        if(i<arr.length-1){
javascript属于前端吗
            li=tag('li');
            ul.append(li);
            li.append(makeTree(arr,i+1));
        }
        return ul;
    }
    hashchange=function(e){
        content.innerHTML="";
        let arr=location.hash.slice(1).split('/')
        content.append(makeTree(arr,0));
        let ateElement('p');
        let o=articles;
        for(let i in arr)o=o[arr[i]];
        text.innerText=o;
        content.append(text);
        console.log(text);
    }
</script>
2
(1)√
(2)√
3
(1)a c d b
(2)a c d
(3)a c
4
(kie='a=100; secure';

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。