惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
T
The Blog of Author Tim Ferriss
H
Help Net Security
博客园 - 叶小钗
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
DataBreaches.Net
博客园 - 聂微东
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
酷 壳 – CoolShell
酷 壳 – CoolShell
G
Google Developers Blog
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
B
Blog
Engineering at Meta
Engineering at Meta
V
V2EX
Hugging Face - Blog
Hugging Face - Blog

Surmon.me

一人有限集团 你就是不敢 创造力是温柔的谎言 人类正在退出人类 AI 代替不了这样的你 脉冲点火背后的架构设计 基于 Cloudflare 生态的 AI Agent 实现 NodePress 支持用户登录了 从统计学习到通用智能 2025 投资报告:走慢的路 无依之地 会杀人的菩萨 无我不是共识 文化的积重与偏见 当下即安 科学的尽头是态度 无我不是 Egoless 信仰不因恐惧而存在 世间无解的矛与盾 先别急着做些什么 佛不需要你的皈依 真理的幻觉 两扇大门 造心里的浮屠 自胜者强 逻辑与智慧 真的相 快乐的秘密 只需愿意 是名体验
经常会被问的那些垃圾 JavaScript 面试题
Surmon · 2017-04-18 · via Surmon.me

不定期更新,整理那些比较垃圾的 JavaScript 面试题,让面试官无法装逼,仅此而已。

ES6模板解析器

在这里

构造函数、类、原型、变量声明、函数基础

        
        

12345678910111213141516171819202122232425262728293031323334353637383940414243444546

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() // 分割线 --------------------------------------------- // 上面代码基本等同于 function getName() { console.log(5) } function Foo() { getName = function () { console.log(1) } return this } Foo.getName = function () { console.log(2) } Foo.prototype.getName = function () { console.log(3) } getName = function () { console.log(4) } // 执行过程 // Foo的静态属性 Foo.getName() // 全局getName函数 getName() // 未实例化,this指向window,window中的getName,即全局getName Foo().getName() // 全局getName,但由于Foo执行后全局的getName被重新赋值 getName() // 只是实例了一个子函数,没什么异样 new Foo.getName() // 实例化类,并执行原型上的方法 new Foo().getName() // 将原型上的方法再实例一次 new new Foo().getName()

闭包和单线程

        
        

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960

for(var i = 0; i < 5; i++) { console.log(i) } // 0 1 2 3 4 for(var i = 0; i < 5; i++) { setTimeout(function() { console.log(i) }, 1000 * i) } // 立即打印一个 5,每隔一秒一个 5 for(var i = 0; i < 5; i++) { (function(i) { setTimeout(function() { console.log(i) }, i * 1000) })(i) } // 0,+1s 1 +1s 2 +1s 3 +1s 4 for(var i = 0; i < 5; i++) { (function() { setTimeout(function() { console.log(i) }, i * 1000) })(i) } // 立即打印一个5,每隔一秒一个5(实际上闭包内没有形参,有的话就正常了) for(var i = 0; i < 5; i++) { setTimeout((function(i) { console.log(i) })(i), i * 1000) } // 0,1,2,3,4 同时定时器失效,因为函数体没return有效函数 setTimeout(function() { console.log(1) }, 0) new Promise(function executor(resolve) { console.log(2) for( var i = 0; i < 10000; i++ ) { i == 9999 && resolve() } console.log(3) }).then(function() { console.log(4) }) console.log(5) // 输出,执行顺序:同步 => 同步 => 同步 => 异步队列(Promise) => 异步队列(定时器) // 2 3 5 4 1

函数的隐式转换

        
        

12345678910111213141516171819202122232425262728

function fn() { return 20 } console.log(fn + 10) function fn() { return 20 } fn.toString = function() { return 10 } console.log(fn + 10) function fn() { return 20 } fn.toString = function() { return 10 } fn.valueOf = function() { return 5 } console.log(fn + 10)

函数防抖和节流

        
        

1234567891011121314151617181920212223242526272829303132333435363738

// 函数节流 const throttle = (fun, delay) => { let last = null return () => { const now = + new Date() if (now - last > delay) { fun() last = now } } } // 实例 const throttleExample = throttle(() => console.log(1), 1000) // 调用 throttleExample() throttleExample() throttleExample() // 函数防抖 cosnt debouce = (fun, delay) => { let timer = null return () => { clearTimeout(timer) timer = setTimeout(() => { fun() }, delay) } } // 实例 const debouceExample = debouce(() => console.log(1), 1000) // 调用 debouceExample() debouceExample() debouceExample()

未完也不续了。