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

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
LINUX DO - 热门话题
S
Secure Thoughts
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threat Research - Cisco Blogs
AI
AI
B
Blog RSS Feed
S
Schneier on Security
雷峰网
雷峰网
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Cloudbric
Cloudbric
L
LINUX DO - 最新话题
罗磊的独立博客
有赞技术团队
有赞技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
The Hacker News
The Hacker News
博客园 - Franky
Attack and Defense Labs
Attack and Defense Labs
The Cloudflare Blog
Webroot Blog
Webroot Blog
Last Week in AI
Last Week in AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 叶小钗
美团技术团队
L
Lohrmann on Cybersecurity
T
The Blog of Author Tim Ferriss
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
Know Your Adversary
Know Your Adversary
O
OpenAI News
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
PCI Perspectives
PCI Perspectives
H
Heimdal Security Blog
I
InfoQ
GbyAI
GbyAI
T
Threatpost
C
Cisco Blogs

Surmon.me

一人有限集团 你就是不敢 创造力是温柔的谎言 人类正在退出人类 AI 代替不了这样的你 脉冲点火背后的架构设计 基于 Cloudflare 生态的 AI Agent 实现 NodePress 支持用户登录了 从统计学习到通用智能 2025 投资报告:走慢的路 无依之地 会杀人的菩萨 无我不是共识 文化的积重与偏见 当下即安 科学的尽头是态度 无我不是 Egoless 信仰不因恐惧而存在 世间无解的矛与盾 先别急着做些什么 佛不需要你的皈依 真理的幻觉 两扇大门 造心里的浮屠 自胜者强 逻辑与智慧 真的相 快乐的秘密 只需愿意 是名体验 最深沉的梦 森林里倒下的树 现象与相 庸人自扰 React 与 Vue 的完美融合 开心就好吗 与原生家庭和解 两支毒箭 怎么自净其意 一尘不染 一片白云 让风穿膛而过 喝下去,然后闭嘴 活在当下 当纠结发生时 唯「我」独尊 一场把戏(时间) 一场把戏(二元对立) “我” 和 “我” 谁是众生? 船里没有人 玫瑰不需要说话 没有人能渡任何人 你我为轮,使之不再 当我们在谈论独立时 自我约束就是最好的自我接纳 从善与恶的表象出发 佛法不是心理学 别人眼中的你并不是你 高高山上走 祝你心想事成 祝你的噩梦早日发生 道是无情却有情 裙子只为自己而穿 不要盲目地评估自己 先别急着 “爱自己” 让生命欣然舞动 你无法复制乔布斯 符号不是目的 如果一件事发生了 每当我起心动念时 爱出者爱返 理解不是尊重的基础 在没有解决自己的问题之前 “知足常乐” 不是比较 逻辑是无法成为信仰的 买不到的自由 成为诵经者 伤口听不懂大道理 是立场让你不自由 - Unfreedom 天雨大不润无根之草 做自己的神 当心诱惑本身 牛洞冥思录 修罗启示录 让大脑自举 我更喜欢叫它无梦寺 存在主义也许不是解药 出南洋记 2022 的所有答复 没意义的表达 思考的记录 故宫暂行之幻想 极端的比较 解构的终极 舍利子是如何炼成的 心要野 佛教的偏见 文艺青年 我是动物
经常会被问的那些垃圾 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()

未完也不续了。