Javascript收集

js基础作业题

2017-11-21  本文已影响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是按址传递的
上一篇下一篇

猜你喜欢

热点阅读