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-11-19vue2 开发移动端h5 使用那个ui框架比较好?-icode9专业技术文章分享
- 2024-11-19ReactJS结合TypeScript、Vite、Redux和TanStack (React Query) 实战教程
- 2024-11-19Vue3资料入门教程:零基础快速上手指南
- 2024-11-19Vue3资料:新手入门教程与实战指南
- 2024-11-19Vue资料:新手入门vue.js教程与实践指南
- 2024-11-19Vue资料:初学者入门指南
- 2024-11-18tcpdf可以等待vue动态页面加载完成后再生成pdf吗?-icode9专业技术文章分享
- 2024-11-16Vue3资料:新手入门必读教程
- 2024-11-16Vue3资料:新手入门全面指南
- 2024-11-16Vue资料:新手入门完全指南