js 原型链、作用域经典面试题(附解析)
2021/10/3 23:13:29
本文主要是介绍js 原型链、作用域经典面试题(附解析),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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();//2 此时函数未执行,可将Foo看为一个对象,调用对象中的getName方法 getName();//4 预编译过程中,首先寻找变量声明var getName,为undefined。 //再寻找函数声明getName(){},并赋值,此时getName:getName(){}, //代码开始执行,执行到为getName变量赋值,此时getName:function(){console.log(4)} Foo().getName();//1 Foo()时函数执行,函数体内有getName方法,但未使用var声明, //所以getName的作用域是全局,Foo()指向结果返回值为this,this此时指向全局 //所以此时调用的是全局的getName() getName();//1 独立调用,经上一步Foo()执行之后,其函数体中的getName方法已存在于全局 new Foo.getName();//2 符号.的优先级比new高,所以先执行Foo.getName() //仍可看为调用Foo对象中的getName()方法,为2,new 2也为2 new Foo().getName();//3 new Foo()为默认规则,所以先执行, //new Foo().getName()可看为构造函数Foo的实例化对象.getName(), //此时构造函数中没有this.getName(){}方法供实例对象调用, //所以要在构造函数的原型对象上找,原型对象中存在此方法,所以为3 new new Foo().getName();//3 此步骤与上步类似,只多了一个new,所以为new 3,结果还是3
这篇关于js 原型链、作用域经典面试题(附解析)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略