一、场景描述
有这样一个页面,上面4个按钮。点击按钮给用户弹出点击的是哪个~
聪明的小伙马上想到了,依次给做个下标,标记呗!
<button onclick="alert(0)">按钮</button>
<button onclick="alert(1)">按钮</button>
<button onclick="alert(2)">按钮</button>
<button onclick="alert(3)">按钮</button>
解决问题的思路与业务描述也对应上了,但是面试官不满意。说JS不能与HTML耦合在一起
小伙又马上想到,这还不简单么?立马一顿操作,给我发offer吧~~~
<button>按钮</button>
<button>按钮</button>
<button>按钮</button>
<button>按钮</button>
var btns = document.getElementsByTagName('button')
for (var i = 0; i < btns.length; i++) {
btns[i].onclick = function () {
alert(i)
}
}
面试官眉头紧锁~ 叫小伙当面测试一下!
小伙:怎么回事?不管点击哪个都弹出 “4”
面试官:要不今天就这样?回去等通知吧~
小伙大吼:不行,刚才是我粗心了,再来~
var btns = document.getElementsByTagName('button')
for (var i = 0; i < btns.length; i++) {
btns[i].index = i //新增一行
btns[i].onclick = function () {
alert(this.index)
}
}
面试官:行,这算一种方法~ 还有吗? 起码要写出2种哦!~
小伙轻蔑一笑:这能难倒我?薛微展示一下闭包的写法吧,冲啊~
var btns = document.getElementsByTagName('button')
for (var i = 0; i < btns.length; i++) {
(function(i){
btns[i].onclick = function () {
alert(i)
}
})(i)
}
面试官:你小子,还有点东西啊,但是你怎么代码量越写越多呢? 能简便一下吗?
小伙:你就是想考我吧,那我就再送你一种,来吧~
var btns = document.getElementsByTagName('button')
for (var i = 0; i < btns.length; i++) {
arr[i].onclick = new Function(`alert(${i})`);
}
面试官:嗯!不错不错,就是代码比较怪异~ 能优化么?
小伙:好家伙,看来是时候展示真正的技术了!es6发光吧~
var btns = document.getElementsByTagName('button')
for (let i = 0; i < btns.length; i++) { //var 改成 let
btns[i].onclick = () => alert(i)
}
面试官: 可以啊,小兄弟~ 基本功还行。但是这些都是基本操作,还有其他方法吗?
小伙心想近日幸好刚看完《你不知道的JavaScript》,那就来吧~
var btns = document.getElementsByTagName('button')
for (let i = 0; i < btns.length; i++) {
try{
throw i
}catch(i){
btns[i].onclick = function () {
alert(i)
}
}
}
面试官:你今天是我面过最强的一个,我愿称你为最强实习生... 但是希望你再给我一点惊喜,还能写出一种,今天就录用你
小伙目露凶光,大喊一声:八门遁甲,夜凯~开~~~
var btns = document.getElementsByTagName('button')
for (let i = 0; i < btns.length; i++) {
(btns[i].onclick = function () {
alert(arguments.callee.i);
}).i = i;
}
面试官满意一笑:恭喜你通过考验!工资1500,明天直接过来吧~