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是按址传递的
网友评论