JS:笔试题3(this 作用域 隐式声明提升 原型 符号优先级)
考点:
this 作用域 隐式声明提升 原型 符号优先级
function Foo() { getName = function() { console.log(1); } return this; } Foo.getName = function() {console.log(2)} Foo.prototype.getName = function() {console.log(3)} var getName = function() {console.log(4)} function getName() {console.log(5)} Foo.getName(); getName(); Foo().getName(); getName(); new Foo.getName(); new Foo().getName(); new new Foo().getName();
打印结果:
2
4
1
1
2
3
3
理解:(若有错,请指正)
/* 第一个foo.getName:打印 2 第二个getName();函数与函数变量名相同, var是定义式先提升,fun是声明式;所以运行var的定义式; 调用函数getName():打印 4 第三个Foo().getName():先调用Foo,取成员getName, 再调用getName:打印 1 第四个getname(),在调用Foo()时 返回了this,指向全局; 改变了全局变量getName 的值;再次调用getName时, 返回的是改变了的函数;打印 1 第五个考查了符号优先级 顺序是(new(Foo.getName)()); 先找到 Foo.getName,并创建一个新对象,再调用函数; 打印: 2 第六个 同上(((new Foo()).getName)()); 创建一个新对象,并调用;返回了一个函数: getName = function() { console.log(1); } 访问了一个getName成员; Foo.prototype.getName = function () { console.log(3) } F{prototype{getName = function(){console.log(3)}}} 打印: 3 第七个 ((new (new Foo())).getName)(); new带参-->new无参-->访问成员getName-->调用函数 创建一个新对象,并调用;返回了一个函数: getName = function() { console.log(1); } 创建一个新对象,在这个新创建的对象中找一个getName成员 再调用getName函数 打印: 3 */