js基础作业题

作者: 扶搏森 | 来源:发表于2017-11-21 23:22 被阅读15次

    NO1

    function bar(){
        console.log(s);
    }
    function test(){
        var s=2;
        bar();
    }
    var s=1;
    test();
    

    js是词法作用域和函数级作用域,function bar(){}的时候就已经确定了s的作用域了,只会在bar函数的内部查找s,对s进行RHS查找,如果找不到,就找bar函数外部的作用域

    NO2

    function test(){
        a=20;
    }   
    test();
    alert(a);
    

    对a进行LHS查找时,没找到,就在全局var a;

    NO3

    function test(){
        
    }
    var test;
    test();
    

    执行,不会报错,相当于

    var test;
    function test(){
        
    }
    test();
    

    函数优先级高,重复声明会被忽略

    NO4

    +function() {
        alert(a);
        a();
        var a = function() {
            console.log(1);
        }
        function a() {  
            console.log(2); 
        } 
        alert(a);
        a();
        var c = d = a;
    }();
    alert(d);
    alert(c);
    

    相当于

    +function() {
        function a() {  
            console.log(2); 
        } 
        var a;
        alert(a);
        a();
        a= function() {
            console.log(1);
        }
        alert(a);
        a();
        var c = d = a;
    }();
    alert(d);
    alert(c);
    

    NO5

    请用一句话遍历变量a(禁止用for已知var a="abc")

    const s="abc" 
    Array.from(s,x=>console.log(x));
    
    const s="abc";
    //借数组里面的方法
    Array.prototype.forEach.call(s,x=>console.log(x));
    
    const s="abc";
    [...s].map(x=>console.log(x));
    

    NO6

    请用一句话算出0-100之间学生的学生等级,如90-100输出1等生、80-90为2等生以此类推。不允许使用if switch等

    function grade(x){
        return 10-(x/10);
    }
    

    NO7

    var s=[];
    var arr=s;
    for(var i=0;i<3;i++){
        var pusher={
            value:'item'+i
        },tmp;
        if(i!==2){
            tmp=[];
            pusher.children=tmp;
        }
        arr.push(pusher);
        arr=tmp;
    }
    console.log(s[0]);
    
    i=0;
    pusher ={
        value:item0,
        children:tmp
    }
    arr={
        value:item0,
        children:tmp
    }
    arr=tmp;
    tmp变成中间变量,s=arr=tmp=pusher.children;
    arr={
        value:item0,
        children:tmp
    }
    arr=s; s进行RHS
    下次执行 arr.push的时候就是修改上次保存指针的children的值
    //半知半解,不是很理解,指针是进行变化了的,arr=s是按址传递的
    

    相关文章

      网友评论

        本文标题:js基础作业题

        本文链接:https://www.haomeiwen.com/subject/hjvgvxtx.html