03-JS?级-常??试题
1.this绑定
1.1this的绑定规则有?种?
默认绑定:?函数调?,函数没有被绑定到某个对象上进?调?
隐式绑定:通过某个对象发起的函数调?,在调?对象内部有?个对函数的引?。
显式绑定:明确this指向的对象,第?个参数相同并要求传??个对象。
apply/call
bind
new绑定:
创建?个全新对象
新对象被执?prototype链接
新对象绑定到函数调?的this
如果函数没有返回其他对象,表达式会返回这个对象
1.2this的?试题解析
varname=window;
functionPerson(name){
=name;
this.foo1=function(){
console.log();
};
this.foo2=()=console.log();
this.foo3=function(){
returnfunction(){
console.log();
};
};
this.foo4=function(){
return()={
console.log();
};
};
}
varperson1=newPerson(person1);
varperson2=newPerson(person2);
//person1.foo1()//person1隐式调?
//person1.foo1.call(person2)//person2显示调?this指向person2所在的对象
//person1.foo2();//person1箭头函数向上层作?查找上层作?域中的this为person1指向
的对象
//person1.foo2.call(person2);//person1箭头函数显示绑定没?
//person1.foo3()()//window相当于将返回的函数赋值给?个变量指向该变量是?函数调?
//person1.foo3.call(person2)()//window默认调?
//person1.foo3().call(person2)//person2将函数的this显示绑定到person2所在的对象
//person1.foo4()()//person1箭头函数向上层作?域中查找thisfoo4中的this隐式绑定为
person1
//person1.foo4.call(person2)()//person2箭头函数向上层作?域中查找thisfoo4中
的this显示绑定为person2
//person1.foo4().call(person2)//person1箭头函数显示绑定没?和person1.foo4()
()xiangtong
作?域
什么是变量提升、函数提升?
变量提升:
简单说就是在js代码执?前引擎会先进?预编译,预编译期间会将变量声明与函数声明提升?其对
应作?域的最顶端,函数内声明的变量只会提升?该函数作?域最顶层。
当函数内部定义的?个变量与外部相同时,那么函数体内的这个变量就会被上升到最顶端。
举个例?,如:
console.log(a);//undefined
vara=3;//会将vara的声明提升?最顶端
函数提升:
函数提升只会提升函数声明式写法,函数表达式的写法不存在函数提升。
函数提升的优先级?于变量提升的优先级,即函数提升在变量提升之上。
说说你对GO/AO/VO的理解?
GO
GlobalObjectJS代码在执?前会现在堆内存中创建?个全局对象(GO)
?于存放?些定义好的变量?法等包含DateArrayStringNumbersetTimeout等
同时有?个window属性指向??
同时在语法分析转成AST的过程中也会将?些变量函数存放在GO中只是变量的初始值为
unde?ned
AO
函数