js基础作业题

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是按址传递的
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • You don't KnowJS 引语:你不懂的JS这本书�github上已经有了7w的star最近也是张野大大给...
    Sleet阅读 3,680评论 0 0
  • 一、理解js作用域 1、作用域:作用域是一套规则,用于确定在何处以及如何查找变量(标字符)。2、LHS查询:查找的...
    怀念不能阅读 3,255评论 0 1
  • 第一章 编译原理 js是一门编译语言 传统编译语言流程: 分词/词法分析:把字符串分解成有意义的代码块 解析/语法...
    冥冥2017阅读 3,704评论 0 0
  • 代码解析参与者 需要了解变量是如何进行预解析的,首先要知道解析代码的参与者,有三个:引擎、编译器、作用域 编译器对...
    素弥阅读 3,550评论 0 1
  • 【转载】原文地址:std::string详解作者:kieven2008 之所以抛弃char*的字符串而选用C++标...
    VAYY阅读 3,831评论 0 2