3道值得收藏的Javascript题目,你理解吗?
在网上看了几道js的题 整理了一下 贴出来 以供参考:
第一道:
- function foo() {
- foo.abc = function () { alert('Alibaba') }
- this.abc = function () { alert('Alimama') }
- abc = function () { alert('Alipay') };
- var abc = function () { alert('Taobao') }
- }
- foo.prototype.abc = function () { alert('Alisoft'); }
- foo.abc = function () { alert('Yahoo'); }
- var obj = new foo();
- obj.abc();
- foo.abc();
- abc();
我们就直接针对这输出按顺序进行分析,
执行顺序 1.foo.prototype.abc = function(){alert('Alisoft');} //这样之后,我们就可以用obj.abc();不懂prototype原型的,可以看这个prototype原型继承 2.foo.abc = function(){alert('Yahoo');} //alert yahoo 3.var obj = new foo(); //创建一个foo的实例obj,同时,执行了foo函数,也就是obj.abc() = function(){alert('Alimama')} 4.foo.abc = function(){alert('Alibaba')} //foo.abc是foo类的静态方法,在实例化foo后执行了代码片段foo.abc = function () { alert('Alibaba') } //覆盖了原来的foo.abc = function(){alert('Yahoo');},所以foo.abc()输出alibaba 5.this.abc = function(){alert('Alimama')} //这句话把function(){alert('Alimama')赋给了obj.abc,所以obj.abc输出alimama 6.abc = function(){alert('Alipay')}; var abc = function(){alert('Taobao')}; //这两句一起分析,如果没有下一句,那么abc是个全局变量,abc输出alipay //但是因为下一句var abc之后,abc的作用域被限制在foo类里,所以外部的abc()会显示未定义
undefined
第二道:
- f = function () { return true; };
- g = function () { return false; };
- (function () {
- if (g() && [] == ![]) {
- f = function f() { return false; };
- function g() { return true; }
- }
- })();
- alert(f()); // true or false ?
答案是false 其实很简单[] == ![]这是两个不同实例的对象, 它们当然不恒等了;其次主要的就是g()是调用的那个方法,它调用局部的 function g() { return true; }而不是全局的 g = function () { return false; }; 所以在这个作用于内 全局的f被覆盖。最终调用的是 f = function f() { return false; };
第三道:
- var o = {
- m: function() {
- return this.length;
- },
- length: 1
- };
- var m = o.m;
- alert(m()); // 请问输出什么? 并解释为什么。
答案是0 这里的this.length 是对象function的length,而不是对象o的length。如 var m = o;
alert(m.m()); 答案就是1,原题的意思同如下代码 var a = function () { return
this.length; };alert(a()); 或则 var a = function () { };alert(a.length);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构