基本信息
文件名称:前端编程课件03-JS高级.pdf
文件大小:733.56 KB
总页数:35 页
更新时间:2025-03-25
总字数:约3.68万字
文档摘要

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

函数